Portanto, você pode usar o *
como curinga para todos os arquivos ao usar cp
no contexto de um diretório. Existe uma maneira de copiar todos os arquivos, exceto x
o arquivo?
Responder1
Rsync lida bem com isso.
Exemplo copiar tudo:rsync -aP /folder1/* /folder/2
Exemplo de copiar tudo com exclusão:rsync -aP --exclude=x /folder1/* /folder2/
O -aP
interruptor:
a
: semelhante acp -a
, recursivo, etc.P
: mostra o progresso, um recurso interessante do rsync.
Responder2
Em bash
você pode usar extglob
:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
onde !(b*)
exclui todos b*
os arquivos.
Você pode desativar posteriormente extglob
com
$ shopt -u extglob
Responder3
Este não é um recurso do cp
, é um recurso do seu shell (ele expande o *
para significar todos os arquivos que não são pontos), portanto a resposta depende de qual shell você está usando. Por exemplo, zsh
suporta esta sintaxe:
$ cp ^x /path/to/destination
Onde ^x
significa "todos os arquivos, exceto x
"
Você também pode combinar padrões de seleção e desseleção, por exemplo, para copiar todos os arquivos wav, exceto aqueles que contêm xyz, você pode usar:
cp *.wav~*xyz*
Responder4
Também pode ser feito no antigo shell bourne (portátil/compatível) de várias maneiras com ferramentas padrão de maneiras muito menos elegantes do que usando globbing de shell avançado ou comandos com opções de exclusão integradas.
Se não houver muitos arquivos (e não com nomes incluindo espaços e/ou quebras de linha), esta pode ser uma maneira:
cp `ls | egrep -v '^excludename$'` destdir/.
Claro, bash
e as ferramentas GNU são ótimas e poderosas, mas ainda nem sempre estão disponíveis. Se você pretende colocá-lo em um script portátil, recomendo find
como no comentário de Rush.