Я пытаюсь рекурсивно добавить [Full]
ко всем файлам, которые не заканчиваются на ]
во всех подкаталогах.
Пример:
Untold Story.wav
должен быть переименован в Untold Story [Full].wav
Untold Story [Instrumental].wav
должен не быть переименован в Untold Story [Instrumental] [Full].wav
Спасибо!
Сценарий ниже должен сделать задание. Использовать его:
rename.py
Выполните его:
python3 /path/to/rename.py <directory_with_files>
#!/usr/bin/env python3
import shutil
import os
import sys
for root, dirs, files in os.walk(sys.argv[1]):
for file in files:
check = file.rfind("."); name = file[:check]
print(name)
if all([not name.endswith("]"), check not in (-1, 0)]):
shutil.move(root+"/"+file, root+"/"+name+" [Full]"+file[check:])
Это добавит [FULL]
к названиям всего .wav, имена которого не заканчиваются в ].wav
:
find . -type f ! -name '*].wav' -exec bash -c 'mv "$1" "${1%.wav} [FULL].wav"' none {} \;
find . -type f ! -name '*].wav'
Это рекурсивно находит все регулярные файлы под текущим каталогом, .
, чьи имена не заканчиваются в ].wav
.
-name '*].wav'
искал бы файлы, имена которых заканчиваются в ].wav
. С тех пор !
отрицание, ! -name '*].wav'
ищет все файлы, имена которых не заканчиваются в ].wav
-exec bash -c 'mv "$1" "${1%.wav} [FULL].wav"' none {} \;
Это переименовывает файлы это find
найденный.
Это передает название файла в удар как его первый аргумент, $1
. mv
используется для переименования файла.
И моя версия с find
, xargs
и rename
find . -type f -iname "*.wav" -print0 | xargs -0 -I {} rename -v 's/^(.*[^\]])(\..*)/$1 [Full]$2/' {}
Запуск прост, find …
, Вы можете легкое изменение запуск (.
) папка и файлы соответствия (*.wav
):
Поиск в текущей папке (.
) для всех файлов (-type f
) с расширением .wav
(-iname "*.wav"
)
Создайте a rename
команда с xargs
{}
в rename …
заменяется find
результаты
Что-то Регулярные выражения и это работают.
Это будет работать только на файлы с именем файла включая расширение:
Используя find
+xargs
+rename
:
find . -type f -regex "^.*[^]]\..*$" -print0 | xargs rename -n "s/^(.*)(\..*)$/\$1 \[Full\]\$2/"
.
в find
: списки все файлы и папки в текущем рабочем каталоге, рекурсивно-type f
в find
: списки только файлы-regex "[...]"
: списки только файлы с именем файла, соответствующим [...]
regex^.*[^]]\..*$
: соответствия любая строка, не имеющая a ]
символ, предшествующий последнему .
символ-print0
в find
: имена файлов печати сопровождаются a NULL
символ вместо символа новой строкиxargs
: передачи путь каждого файла к rename
-n
в rename
: печатает изменения, не применяя ихs/^(.*)(\..*)$/\$1 \[Full\]\$2/
: добавляет a [Full]
строка перед последним .
символ к имени файлаДля применения изменений удалите -n
опция от rename
команда:
find . -type f -regex "^.*[^]]\..*$" -print0 | xargs rename "s/^(.*)(\..*)$/\$1 \[Full\]\$2/"