У меня есть сценарий с использованием цикла for, который будет переименовывать папки и файлы. Сценарий возьмет список файлов и папок и переименует их условно. Я хотел бы вызвать файл с помощью команды:Переименование подкаталогов и файлов
find test/* -exec ./replace.sh {} \;
Мой replace.sh сценарий будет содержать что-то подобное:
for i in [email protected]
mv $OLDFILE $NEWFILE
done
$ старый_файл и $ NewFile было установлено ранее, и я не верю из них возникнут проблемы.
Моя проблема возникает, когда я попадаю в подкаталоги. Первоначально, я бы папки, такие как:
folder_1
-file1
-file2
Когда мой сценарий изменяет folder_1 в folderX1, следующий аргумент, folder_1/file1 woudl недействительным как измененный путь будет folderX1/file1. Я решил, что могу создать стек со списком папок, которые меняются, и выталкивать их позже, чтобы переименовать файлы, но это кажется трудным для bash. Есть ли лучший метод, который мне не хватает?
P.S Я мог бы запускать программу несколько раз, чтобы пройти через все подкаталоги, но это не кажется эффективным.
Вы правы, что Glob ненужно; вы ошибаетесь в том, что это не вредно. Вы можете указать список мест для поиска, прежде чем указывать критерии поиска.Например: 'find/work1/work2/work3/work4/work5 -name '* bug *' -type f' в порядке и может быть сокращен до' find/work [1-5] -name '* bug *' -тип f'. –
@JonathanLeffler - если бы существовал файл, чье имя начиналось с дефиса, 'find' не считал бы начало его списка выражений? Хотя, конечно, можно указать несколько путей, так что * случайно * никогда не может быть хорошим. – ghoti
Имя, начинающееся с тире, будет иметь значение только в том случае, если оно было забито простой звездой. Например, если вы делаете './*', важно не иметь в каталоге такие файлы, как '-delete'. –