Перебирайте папки (с пробелами в именах) и меняйте имя файла внутри на имя папки - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь решить проблему, чтобы автоматизировать процесс переименования файлов с:

/subfolder 1/0123.txt
/subfolder 2/13134.txt

до:

/subfolder 1/subfolder 1.txt
/subfolder 2/subfolder 2.txt

Я пробовал такие вещи, как:

OIFS="$IFS"
IFS=$'\n'
for dir in */; do mv "${dir}"*.txt "${dir}"`echo "${dir%\}"`.txt; done
IFS="$OIFS"

или:

for dir in */; do   mv "${dir}"/*.txt "${dir}"/"${dir}".txt; done

, но я сталкиваюсь с проблемой пробелов или запаздывания "/" в имени папки

1 Ответ

1 голос
/ 05 марта 2020

Я думаю, вы получите более настраиваемый код с find (это версия GNU):

find . -maxdepth 2 -mindepth 2 -type f -name "*.txt" -exec sh -c '
    file=$1
    fulldir=$(dirname "$file")
    dir=${fulldir##*/}
    mv "$file" "$fulldir/$dir.txt"
' findshell {} \;

Это находит все .txt файлы в каталогах на один уровень ниже текущего, как определяется -maxdepth и -mindepth. Таким образом, он найдет ./subfolder 1/0123.txt, но не ./x.txt, ни ./subfolder 1/subsubfolder 1/0123.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...