Одна из возможных причин заключается в том, что файл, который необходимо изменить, еще не существует.
Запустите сценарий вместо chown и chmod, который может проверять, существует ли цель, и может записывать информацию в файл журнала.
Начнем с этих файлов:
$ ls
'unique filename 1.flac' 'unique filename 2.flac' 'unique filename
Запустим эту команду:
$ for f in [0-9]*flac; do mv "$f" "${f#*.}"; done
После выполнения вышеуказанного файлы будут:
$ ls
'unique filename 1.flac' 'unique filename 2.flac' 'unique filename 3.flac'
for f in [0-9]*flac; do
запускает цикл for
для каждого имени файла, которое начинается с числа и заканчивается на flac
. mv "$f" "${f#*.}"
удаляет начало имени файла до первой точки включительно. done
сигнализирует об окончании цикла for
.
rename
Существуют две несовместимые утилиты с именами rename
. Этот метод применим к команде rename
(, иногда называемой prename
), которая поставляется с Perl.
Если у вас установлен другой rename
, этот метод не будет работать.
Давайте снова начнем с этих файлов, а затем запустим команду prename
:
$ ls
'1288.unique filename 3.flac' '128.unique filename 1.flac' '6.unique filename 2.flac'
$ prename 's/^\d+\.//' [0-9]*flac
$ ls
'unique filename 1.flac' 'unique filename 2.flac' 'unique filename 3.flac'
Переименование в Perl использует регулярные выражения. \d+\.
соответствует одной или нескольким цифрам, за которыми следует точка. ^
требует, чтобы эти цифры стояли в начале имени файла. s/^\d+\.//
заменяет эти цифры и точку ничем.