Рекурсивно переименуйте все файлы, имя которых запускается с тире

В терминале я могу переименовать единственный файл, который запускается с тире, т.е.

mv ./-file file

Я могу также переименовать все файлы в каталоге, которые запускаются с тире, т.е.

for f in ./-*; do rename 's/-//' "$f"; done

Однако, как я могу сделать это рекурсивно. Я попытался использовать find команда, rename команда и рекурсивное for цикл. Между прочим, много имен файлов имеет больше чем одного тире. Я только хотел бы удалить первого тире.Спасибо!

5
задан 15 February 2017 в 12:31

2 ответа

Использование find и rename:

find . -iname '-*' -execdir rename -n 's:./-:./:' {} +

find . -iname '-*' соответствия все имена файлов, начинающиеся -, и затем -execdir ... {} + выполнения команда с теми именами файлов как аргументы, после cd луг к каталогу, содержащему файлы. Это означает, что аргументы команды всегда имеют имена файлов формы ./-foo. Затем легко просто соответствовать - после ./ в regex.

10
ответ дан 23 November 2019 в 08:51

Думаю, это тоже должно работать

for i in $(find . -iname '-*') ; do mv $i $(echo $i | sed -e "s/-//"); done
2
ответ дан 16 March 2020 в 01:48

Другие вопросы по тегам:

Похожие вопросы: