Использование perl rename
утилиты (, также известной как prename
иfile-rename
):
$ rename -n 's/Round(\d)Div(\d)/Round_$1_Div$2/' */*
rename(Round1Div2/file3.txt, Round_1_Div2/file3.txt)
rename(Round1Div2/file4.txt, Round_1_Div2/file4.txt)
rename(Round2Div2/file3.txt, Round_2_Div2/file3.txt)
rename(Round2Div2/file4.txt, Round_2_Div2/file4.txt)
Опция -n
делает это пробным -прогоном, так что он только показывает, что он будет делать, а не делает это на самом деле. Когда вы уверены, что он будет делать то, что вы хотите, либо удалите -n
(, который просто переименовывает файлы без отображения хода выполнения или другого вывода ), либо замените его на -v
для подробного вывода:
$ rename -v 's/Round(\d)Div(\d)/Round_$1_Div$2/' */*
Round1Div2/file3.txt renamed as Round_1_Div2/file3.txt
Round1Div2/file4.txt renamed as Round_1_Div2/file4.txt
Round2Div2/file3.txt renamed as Round_2_Div2/file3.txt
Round2Div2/file4.txt renamed as Round_2_Div2/file4.txt
Проще всего использовать что-то вроде
mv -i Round1Div2/* Round_1_Div2 && rmdir Round1Div2
mv -i Round2Div2/* Round_2_Div2 && rmdir Round2Div2
Если есть конфликты имен, опция -i
для mv
должна дать вам интерактивную подсказку с вопросом, хотите ли вы перезаписать файл.
Если у вас есть скрытые имена файлов или много тысяч файлов, вы можете использоватьrsync
:
rsync -av --ignore-existing Round1Div2/ Round_1_Div2
rsync -av --ignore-existing Round2Div2/ Round_2_Div2
Обратите внимание, что /
в конце имени исходного каталога добавлено намеренно. Это воссоздаст файловую иерархию исходных каталогов в целевых каталогах и не перезапишет существующие данные. Исходные каталоги останутся на месте (, так что это копирует , а не перемещает, если только вы не добавите опцию--remove-source-files
).
Я бы использовалmv -S dup folder1/* folder2
Вы можете использовать mv
в интерактивном режиме с -i
, как предлагает другой ответ . Или вы можете использовать-S
--suffix=SUFFIX . Это означает, что если файл file.txt уже существует, то этот файл в новом месте будет переименован в file.txtdup (с -S dup ).
awk
:Поскольку у вас есть каталоги, перечисленные в текстовых файлах. Для этой цели можно использовать следующую команду awk:
awk '{ printf "mv -S dup %s/* ", $0 ; getline < "newname.txt"; printf "%s\n", $0 }' rename.txt