команда find для переименования каждого файла и dir.максимальная глубина 1 - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужна команда find для переименования каждого файла и директории.в моем текущем реж.пример: у меня есть файлы и каталог:

abc.txt 
abcd.pdf
xyx.csv
XYS
XYZ

I want to rename it 
abc.txt -> old_abc.txt
XYZ -> old_XYZ

Я использую что-то вроде

find . ! -name dbg.txt -exec rename * old_ '{}' \;

Как я могу передать каждый файл и каталог в качестве аргумента для поиска команды.

Примечание: я хочу избежать переименования файла dbg.txt. Пожалуйста, помогите здесь !!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018
find . -type f -name "*.*"|xargs sed -i 's/old_name/new_name/g'

Однако при этом будут переименованы все старые имена во всех подкаталогах и файлах.

0 голосов
/ 19 декабря 2018

Если у вас есть утилита perl rename, вы можете использовать:

find . -type f -not -name 'dbg.txt' -print0 |
xargs -0 -I {} rename -n 's~^(.+/)(.+)~$1old_$2~' '{}'

{обратите внимание, что -n для пробного запуска.После проверки вывода этой команды удалите опцию -n, чтобы переименовать все файлы.

Если у вас нет утилиты rename, используйте:

find . -type f -not -name 'dbg.txt' -print0 |
xargs -0 -p -I {} bash -c 'mv "$1" "${1%/*}/old_${1##*/}"' - '{}'
...