Como posso mover todos os arquivos, exceto um? Estou procurando algo como:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
onde movo coisas antigas para novas - pasta, exceto Tux.png
. ! -sign representa uma negação. Existe alguma ferramenta para o trabalho?
Coloque o seguinte em seu arquivo .bashrc
Estende regexes. Você pode mover todos os arquivos, exceto um por
Exceções em relação a outros comandos
Observe que, nos diretórios de cópia, o forward-flash não pode ser usado no nome conforme observado no encadeamento Por que extglob, exceto quebrar, exceto a condição? :
isso
Backups.backupdb/
está errado aqui antes da negação e eu não o usaria nem na movimentação de diretórios por causa do risco de usar incorretamente, depois globs com outros comandos e possíveis outras exceções.fonte
mv !(arc*) archive_190629b
Eu usaria a maneira tradicional do find & xargs:
-maxdepth 1
faz com que não procure recursivamente. Se você se importa apenas com arquivos, pode dizer-type f
.-mindepth 1
faz com que não inclua o~/Linux/Old
próprio caminho no resultado. Funciona com qualquer nome de arquivo, incluindo aqueles que contêm novas linhas incorporadas.Um comentário observa que a
-t
opção mv é provavelmente uma extensão GNU. Para sistemas que não possuemfonte
Uma maneira rápida seria modificar o nome do arquivo tux para que seu comando de movimento não corresponda.
Por exemplo:
fonte
Eu acho que a maneira mais fácil de fazer é com backticks
Editar:
Use barra invertida com ls para evitar usá-lo com alias, ou seja, principalmente ls é alias como ls --color.
Obrigado @Arnold Roa
fonte
grep -v
lá?Para o bash, a resposta sth está correta. Aqui está a sintaxe zsh (meu shell de escolha):
Requer a
EXTENDED_GLOB
opção de shell a ser definida.fonte
Acho que isso é um pouco mais seguro e fácil de usar para movimentos simples que excluem determinados arquivos ou diretórios.
fonte
-l
opção parals
incluir muitas informações irrelevantes na linha de comando e resultar em falha do comando mv.O seguinte não é um método 100% garantido e não deve ser tentado de forma alguma para scripts. Mas algumas vezes é bom o suficiente para o uso rápido do shell interativo. Um arquivo de arquivo glob como
(que corresponderá a todos os arquivos com nomes começando com a, b ou c) pode ser negado inserindo-se primeiro um caractere "^", ou seja,
Às vezes eu uso isso para não corresponder ao diretório "lost + found", como por exemplo:
Claro que, se houver outros arquivos começando com l, tenho que processá-los posteriormente.
fonte
O comando find lista todos os arquivos regulares e o comando fgrep filtra qualquer arquivo Tux.png. Os backticks dizem ao mv para mover a lista de arquivos resultante.
fonte
Que tal mover tudo na pasta e depois mover o Tux.png de volta?
Não consigo pensar em nenhuma sintaxe do shell para dizer "tudo, exceto ..." de imediato.
fonte
fonte
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
funciona em vez disso.E se:
Você precisa estar na pasta.
fonte
Pode-se pular o grep assim:
fonte
Isso poderia ser mais simples e fácil de lembrar e funciona para mim.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
fonte