Много лет назад я конвертировал часть своих файлов в произвольный формат с определенным расширением. я больше не желаю иметь их в этом формате, и я хотел бы начать процесс их замены, потому что преобразование не является подходящим решением. к сожалению, они смешаны в отдельных папках одной корневой папки с файлами в моем текущем формате другого расширения. Я чувствую, что это облегчило бы этот процесс, если бы я переместил каждую папку, содержащую файл с нежелательным форматом, в отдельную корневую папку. Файлы хранятся на сервере Linux и доступны через samba. Как я могу сделать это с помощью пары команд или сценария? Я открыт и для других предложений. Я хочу избежать затрат времени на редактирование текстовых файлов. В конечном счете, я хотел бы, чтобы команда, которая производила список полных путей для папок, отсортированных по количеству уровней, была бы приятной чертой. Список всех файлов явно не тот, что я ищу.
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
ИСТОЧНИК должен быть самым верхним каталогом, который вы ищете. Если файлы хранятся по всей вашей файловой системе, тогда SOURCE должна быть самой файловой системой.
find ~/SOURCE -name '*.YOUR_EXTENSION' -exec mv {} ~/DESTINATION \;
Переименуйте их так:
$ rename -v 's/\.YOUR_EXTENSION$/\.NEW_EXTENSION/' *.YOUR_EXTENSION
Было бы неплохо запустить это с опцией -n
вместо опции -v
ДО того, как вы действительно захотите переименовать, потому что опция -n
просто запустит симуляцию и выдаст вам результаты этой симуляции.