Encontrei vários exemplos que funcionam desde que não haja espaços nos nomes dos arquivos. Infelizmente, tenho espaços em meus nomes de arquivos (não é minha escolha, na verdade são eles que preciso remover).
Então, por exemplo, foi isso que pensei que funcionaria:
encontrar . -tipo f | grep ).MOV | xargs rm
porque quero excluir os arquivos como:
- L112 (1).MOV
- L113 (1).MOV
- L113 (2).MOV
- etc.
e eu quero manter os arquivos como
- L112.MOV
- L113.MOV
- L114.MOV
- etc.
Isso encontra os arquivos corretamente:
encontrar . -tipo f | grep).MOV
mas quando eu canalizo para rm, os espaços no nome do arquivo estragam tudo.
Qualquer ajuda seria muito apreciada.
Responder1
rm *\).MOV
Responder2
Diga xargs
para usar novas linhas como delimitadores:
find . -type f | grep ).MOV | xargs -d'\n' rm
Melhor, faça find
a correspondência e use -print0
e xargs -0
para permitirqualquercaractere nos nomes dos arquivos, mesmo \n
!
find . -type f -name '*).MOV' -print0 | xargs -0 rm
Melhor ainda, basta find
ligar rm
diretamente.
find . -type f -name '*).MOV' -exec rm {} +
Melhor, pule rm
e faça find
a exclusão.
find . -type f -name '*).MOV' -delete
Ou neste caso específico, quem precisa de toda a maquinaria pesada?
rm *\).MOV
Responder3
Experimente isto:
find . -name "*).MOV" -exec rm {} \;
Responder4
Na maioria das instalações Unix você pode indicar um espaço em um nome de arquivo prefixando-o com uma barra invertida. Então, por exemplo, tente isto:
mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"
Faça um "ls" e você verá isto:
arquivo 3 arquivo 4 arquivo1 arquivo2
Agora faça "ls *\ *" e você deverá ver tudo com um espaço:
arquivo 3 arquivo 4
Então talvez apenas um "rm *\ *" seja tudo que você precisa? Ou modifique ligeiramente essa expressão regular para atender às suas necessidades.
Espero que ajude!