Bash - move arquivos com nome similar de vários diretórios para pwd

1

Digamos que eu tenha diretórios:

mydir1
mydir2
mydir3
mydir4

contendo arquivos que começam com abcd

Gostaria de mover todo o arquivo que começa com abcd para o diretório pai. Como posso fazer isso?

Aqui está o que eu tenho jogado com:

for file in pwd; mv *abcd ../
    
por atomh33ls 07.02.2014 / 14:35

1 resposta

3

cd para o diretório pai e, em seguida:

for f in */abcd*;
do mv $f ./
done

que corresponderá a mydir1/abcdfoo , mydir2/abcdbar etc. e os moverá para o pwd (que é o diretório pai). Se você quiser apenas procurar em diretórios chamados mydir *, você pode especificar

for f in mydir*/abcd*; 
do mv $f ./
done

Você também pode fazer

find . -name "abcd*" -type f -exec mv {} ./ \;

que encontra todos os arquivos regulares (não dirs) chamados abcd * e os move para o pwd. Find parece recursivamente a partir do diretório que você especificar após o comando find, que é "." nesse caso. Você pode usar caminhos absolutos como:

find /path/to/the/parent/dir -name "abcd*" -type f -exec mv {} /path/to/the/destination/dir/ \;

AVISO : só notei isso quando tentei. Se houver vários arquivos com o mesmo nome em diretórios diferentes, mydir1 / abcdfoo, mydir2 / abcdfoo e assim por diante, todos, exceto um deles, serão sobrescritos, deixando apenas um arquivo abcdfoo no diretório pai.

    
por 07.02.2014 / 15:03