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, the rename
command, and a recursive for
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!
Best Answer
Using
find
andrename
:find . -iname '-*'
matches all filenames beginning with a-
, and then-execdir ... {} +
runs the command with those filenames as arguments, aftercd
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.