Como renomear múltiplos nomes de arquivos usando find / rename

0

Eu tenho em um servidor Samba muitos arquivos em diretórios / subdiretórios contendo caracteres especiais. O problema é que os arquivos (contendo caracteres especiais) não são visíveis quando tento visualizar arquivos usando o Windows. Então eu escrevi o comando (abaixo) para mudar os nomes dos arquivos com caracteres especiais, mas colocar arquivos renomeados para dirs / subdiretórios não funciona corretamente:

find . -type f -exec rename -v 's/[^a-zA-Z0-9 &](?=[^.]*\.)/_/g' '{}' \;

Na parte inferior, publico o diretório atual contendo arquivos para renomear:

./dir 1/fil[special char]e3.jpg
./dir 1/another dir2/m[special char]r.file1.txt
./dir 1/another dir2/file[special char]2.doc
./dir 3/next dir4/dir 5/fi[special char]le5.xml
./file 4.zip

Espere - depois de usar o comando descrito acima (arquivos em dirs / subdirecionamentos):

./dir 1/fil_e 3.jpg
./dir 1/another dir2/m_r_file1.txt
./dir 1/another dir2/file_2.doc
./dir 3/next dir4/dir 5/fi_le5.xml
./file 4.zip

realidade - arquivos na mesma pasta em que executo o comando:

__dir 1_fil_e 3.jpg
__dir 1_another dir 2_m_r_file1.txt
__dir 1_another dir 2_file_2.doc
__dir 3_next dir4_dir 5_fi_le5.xml
__file 4.zip

e eu tenho 2 perguntas:

  1. como posso excluir o caminho do nome do arquivo?
  2. como colocar arquivos em diretórios?
por NutcrackerOfDestiny 04.07.2017 / 19:06

1 resposta

1

Se você tiver, use a opção -execdir para find em vez de -exec .

  • -exec executa o comando da raiz do comando com cada caminho como um argumento
  • -execdir executa o comando no diretório de destino com cada nome de arquivo como um argumento

Assim,

find . -type f -execdir rename -v 's/[^a-zA-Z0-9 &](?=[^.]*\.)/_/g' '{}' \;
    
por 04.07.2017 / 23:28