Tente:
find /my_giant_pictures_dir/ -type f -regex '.*\(jpg\|mp4\|mts\)' -execdir bash -c 'mv "$1" "../${PWD##*/}_${1#./}"' Bash {} \;
Como funciona
-
find /my_giant_pictures_dir/ -type f -regex '.*\(jpg\|mp4\|mts\)'
Isso procura todos os arquivos regulares em qualquer lugar, underneach
/my_giant_pictures_dir/
cujos nomes terminam com jpg, mp4 ou mts. Cada arquivo, por sua vez, é passado para o-execdir
. -
-execdir bash -c 'mv "$1" "../${PWD##*/}_${1#./}"' Bash {} \;
Isso move o arquivo para seu diretório pai enquanto o renomeia.
Mais detalhadamente,
-execdir bash -c '...' Bash {} \;
altera o diretório de trabalho atual para o diretório em que o arquivo está e executabash -c '...'
com os argumentosBash
e o nome do arquivo{}
.bash -c '...'
executa o comando naspas simples com$0
tendo o valor deBash
e$1
tendo como seu valor o nome do arquivo.Dentro das aspas simples, temos
mv "$1" "../${PWD##*/}_${1#./}"
Isso move o arquivo$
para o diretório pai,../
com o nome${PWD##*/}_${1#./}
.