В терминале я могу переименовать единственный файл, который запускается с тире, т.е.
mv ./-file file
Я могу также переименовать все файлы в каталоге, которые запускаются с тире, т.е.
for f in ./-*; do rename 's/-//' "$f"; done
Однако, как я могу сделать это рекурсивно. Я попытался использовать find
команда, rename
команда и рекурсивное for
цикл. Между прочим, много имен файлов имеет больше чем одного тире. Я только хотел бы удалить первого тире.Спасибо!
Использование find
и rename
:
find . -iname '-*' -execdir rename -n 's:./-:./:' {} +
find . -iname '-*'
соответствия все имена файлов, начинающиеся -
, и затем -execdir ... {} +
выполнения команда с теми именами файлов как аргументы, после cd
луг к каталогу, содержащему файлы. Это означает, что аргументы команды всегда имеют имена файлов формы ./-foo
. Затем легко просто соответствовать -
после ./
в regex.
Думаю, это тоже должно работать
for i in $(find . -iname '-*') ; do mv $i $(echo $i | sed -e "s/-//"); done