Recursively rename all files whose name starts with a dash
Solution 1
Using find
and rename
:
find . -iname '-*' -execdir rename -n 's:./-:./:' {} +
find . -iname '-*'
matches all filenames beginning with a -
, and then -execdir ... {} +
runs the command with those filenames as arguments, after cd
ing to the directory containing the files. This means that the command arguments always has filenames of the form ./-foo
. Then it's easy to just match the -
after the ./
in a regex.
Solution 2
I guess this should work as well
for i in $(find . -iname '-*') ; do mv $i $(echo $i | sed -e "s/-//"); done
Related videos on Youtube
![jbrock](https://i.stack.imgur.com/hqv7Z.jpg?s=256&g=1)
Comments
-
jbrock almost 2 years
In terminal I can rename a single file that starts with a dash, i.e.
mv ./-file file
I can also rename all files in a directory that start with a dash, i.e.
for f in ./-*; do rename 's/-//' "$f"; done
However, how can I do this recursively. I have tried using the
find
command, therename
command, and a recursivefor
loop. By the way, a lot of the file names have more than one dash. I would only want to remove the first dash. Thanks! -
jbrock over 7 yearsVery nice. That is exactly what it seemed that needed to be done,
cd
to each directory that contains those files. Thanks! :)