У меня есть каталог, /var/tmp/abc
который имеет 4 файла:
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
Я хочу переименовать все файлы CSV (найти все файлы и переименовать их) в кратчайший (возможно, однострочный) путь к этому:
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
rename
. Я предполагаю, что это Ларри Уоллrename
изrename
пакета Debian и производного (и IIRCprename
по системам убеждения RedHat). Очень полезный инструмент.perl-rename
в арке Linuxverbose
флага он ничего не выводит и не выполняет изменения имени файла, даже если текущий путь имеет файлы с именами, похожими на12345_foo.csv
. Нужно ли выполнять какие-либо дополнительные задачи, чтобы заставить его работать (в настоящее время на Fedora 30)? Это более чистый подход, чем зацикливание. Заранее спасибо!rename
илиprename
? Смотрите мой комментарий выше.man {the command}
списки авторов в конце.rename
команду; см. unix.stackexchange.com/a/238862/135943Пытаться:
Как это устроено:
for f in *.csv; do
Это запускает цикл по всем
*.csv
файлам.mv -i -- "$f" "XXXXX-${f#*-}"
Это переименовывает файлы, как вы хотите, спрашивая в интерактивном режиме, прежде чем перезаписать любой файл.
done
Это отмечает конец цикла.
Пример:
источник
Мне понравилась небольшая проблема, которую вы опубликовали, поэтому вот мое решение. Я предполагаю, что все ваши файлы начинаются с 5 числовых символов, поэтому с помощью команды cut замените исходные числовые файлы на «XXXXX».
Ниже приведены файлы перед командой.
Ниже команда с одним вкладышем.
Ниже приведены файлы после команды.
Это то, что вы ищете? :)
Ссылки:
Цикл вывода команды в bash
Подстроки в баш
источник
no need to fork a new process for each
?cut
это отдельный двоичный файл (/usr/bin/cut
), и для его запуска требуется больше ресурсов, чем для использования встроенных модулей оболочки.нет вилок:
Когда вы используете цикл оболочки,
mv
вилки один раз для каждого файла.rename
Команда Perl не делает.(Команда переименования Perl имеет некоторые ограничения, но в данном конкретном случае эти ограничения не применяются.)
Что касается
rename
команды, показанной ранее, да, это работает, но тогда у вас есть вся эта путаница между двумя различными типами переименования и так далее. Если у вас есть правильный, отлично, но если нет, это тоже работает.Если у вас нет команды perl-rename и вы не можете ее установить, вы можете просто сделать это:
Как видите, здесь используется та же подстановка, что и в верхнем ответе. Конечно, Perl переименования есть и другие навороты (верхний ответ было сказано,
-n
уже, то есть-0
,-f
и так далее), и тем более из них вам нужно, тем больше вы должны установить , что вместо того , чтобы добавить собственные таким образом , ,источник
rename
команде ( top answer , также использует Perl), поэтому, возможно, вам следует добавить к ответу немного больше объяснений, чем просто «нет разветвлений».