Como copiar apenas arquivos em um diretório especificado para outra pasta

1

Estou tentando copiar apenas os arquivos de um diretório (não incluindo pastas ou arquivos em suas subpastas) para outro local usando cp /media/d/folder1/* /home/userA/folder2/ . Ele está copiando os arquivos, mas o problema é que há uma lista de mensagens dizendo cp: omitting directory.... para todas as pastas localizadas em folder1 . Existe alguma outra maneira de copiar essas pastas sem que essa mensagem apareça? Também outra coisa, por favor, estou perguntando a mesma coisa se eu quiser mudar (não copiar), como isso pode ser feito? Obrigado

    
por Tak 16.03.2015 / 02:05

2 respostas

2
find /media/d/folder1/ -maxdepth 1 -type f | xargs cp -t /home/userA/folder2

Parte antes do caractere de pipe | localizar os arquivos no diretório fornecido sem tentar localizar outros arquivos em qualquer subdiretório do diretório especificado. Parte após o pipe pega esses arquivos e copia-os para o diretório de destino. Você pode alterar o comando cp com mv se quiser mover os arquivos em vez de copiá-los.

    
por 16.03.2015 / 02:20
2

Uma abordagem mais segura (que pode lidar com nomes de arquivos com espaços, novas linhas e outros caracteres estranhos) é usar find em si e sua -exec action:

   -exec command {} +
          This  variant  of the -exec action runs the specified command on
          the selected files, but the command line is built  by  appending
          each  selected file name at the end; the total number of invoca‐
          tions of the command will  be  much  less  than  the  number  of
          matched  files.   The command line is built in much the same way
          that xargs builds its command lines.  Only one instance of  '{}'
          is  allowed  within the command.  The command is executed in the
          starting directory.

Então, você poderia fazer:

find /media/d/folder1/ -maxdepth 1 -type f -exec cp {} -t /home/userA/folder2

Note que isso também copiará arquivos ocultos.

    
por 16.03.2015 / 13:41