У меня есть куча файлов в структуре каталогов, как например:Попытки переименовать определенные типы файлов в рекурсивных каталогах
Dir
SubDir
File
File
Subdir
SubDir
File
File
File
Извините за беспорядочное форматирование, но, как вы можете видеть, что есть файлы на все другой каталоге уровни. Все эти имена файлов содержат в себе строку из 7 номеров: 1234567_filename.ext. Я пытаюсь удалить число и подчеркивание в начале имени файла.
Сейчас я использую Баш и с помощью этого Oneliner переименовывать файлы, используя мв и разрезают:
for i in *; do mv "$i" "$(echo $i | cut -d_ -f2-10)"; done
Это время работать, пока я CD'd в каталог. Мне очень хотелось бы найти способ сделать это рекурсивно, чтобы он только переименовал файлы, а не папки. Кроме того, я использовал цикл по каждому элементу в оболочке, вне Баша для каталогов, которые имеют кучу папок с файлами в них, и никаких других подкаталогах как таковые:
foreach$ set p=`echo $f | cut -d/ -f1`
foreach$ set n=`echo $f | cut -d/ -f2 | cut -d_ -f2-10`
foreach$ mv $f $p/$n
foreach$ end
Но это работает только тогда, когда нет других подкаталогов в папках.
Есть ли цикл или oneliner, который я могу использовать для переименования всех файлов в каталогах? Я даже пытался использовать find
, но не мог понять, как включить cut
в код.
Любая помощь очень ценится.
Вы хотите удалить номер и '_'? – Inian
Стреляйте, да извините, вот-вот нужно было отредактировать сообщение, чтобы прояснить это. – VanCityGuy
'set' не используется для установки обычных переменных, а' end' не является ключевым словом 'bash'. – chepner