How to rename files in current directory and its subdirectories using bash script? How to rename files in current directory and its subdirectories using bash script? shell shell

How to rename files in current directory and its subdirectories using bash script?


You can also try:

find . -name "*.wav.gz" | xargs rename -v "s/abcd124*/abcd1234$1/"

It works on newer Unix systems with "xargs" command available. Note that I edited the regular expression slightly.


Try:

find ./ -type d -execdir rename -v "s/^abcd124(.+)/abcd1234\1/" *.wav.gz ";"

Find does already provide an iterator over your files - you don't need for around it or xargs behind , which are often seen. Well - in rare cases, they might be helpful, but normally not.

Here, -execdir is useful. Gnu-find has it; I don't know if your find has it too.

But you need to make sure not to have a *.wav.gz-file in the dir you're starting this command, because else your shell will expand it, and hand the expanded names over to rename.

Note: I get an warning from rename, that I should replace \1 with $1 in the regex, but if I do so, the pattern isn't catched. I have to use \1 to make it work.

Here is another approach. Why at all search for directories, if we search for wav.gz-files?

find . -name "*.wav.gz" -exec rename -v "s/^abcd124(.+)/abcd1234\1/" {} ";"


In bash 4:

shopt -s globstarrename -v "s/^$dir\/abcd124(.+)/$dir\/abcd1234$1/" **/*.wav.gz;