Não tente usar $(cat file)
para esse tipo de coisa - será quebrado, por exemplo, se houver espaços nos nomes dos arquivos, por exemplo. dado
$ cat a.txt
foo
bar baz
bam
e
$ ls -Q a
"bam" "bar baz" "foo" "other file" "somefile"
então
$ (cd a ; rm $(cat ../a.txt))
rm: cannot remove 'bar': No such file or directory
rm: cannot remove 'baz': No such file or directory
Em vez disso, você pode usar xargs
$ ls -Q a
"bam" "bar baz" "foo" "other file" "somefile"
$ xargs -a a.txt -I{} rm a/{}
$ ls -Q a
"other file" "somefile"
Se você realmente quiser usar cat
, combine-o com xargs
:
cat a.txt | xargs -I{} rm a/{}
(apesar de receber o recurso -a
, é um Uso inútil do gato )
Observe que -I{}
implica em -L 1
, ou seja, rm
é invocado uma vez para cada linha do arquivo de entrada; Se você não precisar preceder um caminho de diretório, poderá tornar o comando mais eficiente eliminando o -I
. Nesse caso, xargs
passará vários argumentos para rm
. No entanto, nesse caso, você deve definir explicitamente o delimitador de entrada para nova linha, por exemplo, xargs -a a.txt -d '\n' rm
para evitar quebras nos espaços.