Renomeie todos os arquivos “file.txt” no diretório com vários subdiretórios

2

Se eu tiver um directory1 que tenha um "arquivo.txt" e subdiretórios: "semana", "hoje", "último mês". Em "week" e "last month" também é "file.txt".

directory1/
    file.txt
    week/
        file.txt
    today/
    last month/
        file.txt

Como eu poderia, usando apenas um comando de linha no terminal com o comando mv ou rename.ul , renomear todos os "arquivos.txt" em "directory1" para "new_file.txt"?

    
por Nick 16.01.2014 / 18:05

4 respostas

3

Ainda outro para evitar truques absolutos:

find directory1 -name file.txt -execdir mv {}  new_file.txt \;

execdir executará o comando especificado no subdiretório que contém o arquivo correspondente. Isso elimina até mesmo a necessidade de citar o nome do arquivo, que sabemos não conter espaços.

    
por roadmr 16.01.2014 / 20:13
1
find directory1/ -type f  -name file.txt | while read f; do d=$(dirname $f); mv "$d"/file.txt "$d"/new_file.txt; done
    
por user224465 16.01.2014 / 18:25
0

Outra solução:

find directory1 -name file.txt -exec bash -c 'mv "{}" "$(dirname "{}")/new_file.txt"' \;
    
por user180409 16.01.2014 / 18:39
0

Ainda de outra forma:

find directory1 -name file.txt -print0 | xargs -0 rename 's/file\.txt/new_file\.txt/'
    
por user.dz 16.01.2014 / 18:44