Поиск и переименование файлов

243
RustywithUnix

У меня есть около 1000 файлов, содержащих символ *в имени. Мне нужно найти эти файлы и заменить их *на -. Я работаю с HP UX v11. Я использую следующую команду

find . -type f -name '*\**' -exec bash -c 'f="$1"; mv "$f" "$"' - '{}' \; 

Мне сказали, что это работает, но для меня это переименовывает весь файл -вместо того, чтобы заменить *.

GNU bash, версия 2.04.0 (1) -релиз (hppa2.0w-hp-hpux11.00)

2
Убедитесь, что вы работаете под BASH. Также вы можете проверить версию BASH на своем хосте HP? anubhava 10 лет назад 0
Спасибо, я обновил вопрос информацией о версии bash RustywithUnix 10 лет назад 0
Хорошо, это довольно старый BASH. Можете ли вы запустить `найти. -type f -name '* \ **' `чтобы увидеть, содержит ли он правильные файлы. anubhava 10 лет назад 0
Да, это перечисляет правильные файлы. Проблема заключается в переименовании, как только найдено. RustywithUnix 10 лет назад 0
Я обновил до bash 4.2 и оригинальная команда работает RustywithUnix 10 лет назад 1
о, это прекрасно :) anubhava 10 лет назад 0

1 ответ на вопрос

0
anubhava

Try this command find command:

find . -type f -name '*\**' -exec bash -c 'f="$1"; echo mv "$f" `echo "$f"|tr "\*" "-"`' - '{}' \;