3

Много лет назад я конвертировал часть своих файлов в произвольный формат с определенным расширением. я больше не желаю иметь их в этом формате, и я хотел бы начать процесс их замены, потому что преобразование не является подходящим решением. к сожалению, они смешаны в отдельных папках одной корневой папки с файлами в моем текущем формате другого расширения. Я чувствую, что это облегчило бы этот процесс, если бы я переместил каждую папку, содержащую файл с нежелательным форматом, в отдельную корневую папку. Файлы хранятся на сервере Linux и доступны через samba. Как я могу сделать это с помощью пары команд или сценария? Я открыт и для других предложений. Я хочу избежать затрат времени на редактирование текстовых файлов. В конечном счете, я хотел бы, чтобы команда, которая производила список полных путей для папок, отсортированных по количеству уровней, была бы приятной чертой. Список всех файлов явно не тот, что я ищу.

2 ответа2

2

находить . тип F | sed "s # ^. # $(pwd)#"

возвращает полные пути для всех файлов + ведущий / при запуске в корне вы можете передать это grep и сопоставить расширение с последующим и endline

поместите это в текстовый файл для манипуляций

Теперь вы можете посчитать / в строке и разделить имя файла от конца и mv $ line до / adir / filename

все это может быть в одном скрипте bash ... я недостаточно хорош в скрипте bash, чтобы сделать его единоличным, но это поможет вам в этом. если вы это сделаете, возможно, вы захотите остерегаться скопления файлов.

как бы я справился с этим

ЗДЕСЬ ВНИЗ НОВОЕ

поскольку, очевидно, моя работа - написать вам полнофункциональный скрипт, так как вы не можете читать онлайн-часто задаваемые вопросы или отвечать, когда его спрашивают, каким образом он терпит неудачу:

find . -type f | sed "s#^.#$(pwd)#" | grep '.xml'> test.txt  
./atest.sh > test2.txt  

----atest.sh begin----  
#!/bin/bash  
while read line  
do  
dirname $line  
done 

Для чего еще нужны скрипты ?? потому что мне действительно нечего делать

выходные данные этого сценария - это только имена каталогов, которые содержат файлы, оканчивающиеся на .xml, или каталоги, оканчивающиеся на .xml

2

ИСТОЧНИК должен быть самым верхним каталогом, который вы ищете. Если файлы хранятся по всей вашей файловой системе, тогда SOURCE должна быть самой файловой системой.

find ~/SOURCE -name '*.YOUR_EXTENSION' -exec mv {} ~/DESTINATION \;

Переименуйте их так:

$ rename -v 's/\.YOUR_EXTENSION$/\.NEW_EXTENSION/' *.YOUR_EXTENSION

Было бы неплохо запустить это с опцией -n вместо опции -v ДО того, как вы действительно захотите переименовать, потому что опция -n просто запустит симуляцию и выдаст вам результаты этой симуляции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .