Como eu posso copiar arquivos seletivamente de um diretório para outro diretório?

4

No Linux, como copiar seletivamente a maioria dos arquivos, mas não todos, de um diretório ( dir1 ) para outro diretório ( dir2 )?

Eu não quero copiar os arquivos *.c e *.txt para dir2 .

A página cp man online não pode me ajudar.

    
por user1002288 09.01.2012 / 03:38

3 respostas

4

Além do comando find do eboix (que, da forma como está, quebra no espaço em branco, colocarei uma maneira mais segura ou duas no final), você pode usar o recurso bash do extglob :

# turn extglob on
shopt -s extglob 
# move everything but the files matching the pattern
mv dir1/!(*.c) -t dir2
# If you want to exclude more patterns, add a pipe between them:
mv dir1/!(*.c|*.txt) -t dir2

Veja a página bash man para mais coisas que você pode fazer com o extglob. Observe que isso não é recursivo e, portanto, só moverá arquivos em dir1 diretamente, não em subdiretórios. O método find é recursivo.

Comandos mais seguros find :

find dir1 ! -name '*.c' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' -exec mv -t dir2 {} +

Para mais padrões, basta adicionar mais ! -name declarações:

find dir1 ! -name '*.c' ! -name '*.txt' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' ! -name '*.txt' -exec mv -t dir2 {} +
    
por 09.01.2012 / 04:13
2

Tente isto:

find ./ ! -name '*.c' | xargs -i cp {} dest_dir
    
por 09.01.2012 / 03:44
0

Você pode usar o comando abaixo em dir1:

cp ls|egrep -v .txt\|.c dir2

A parte "ls | egrep -v .txt \ | .c" listará os arquivos sem .c e .txt no nome. cp irá copiá-los para dir2

    
por 05.04.2017 / 09:12