Em um teste limitado, isso funcionou para mim:
cat list.txt | xargs cat | xargs rm
Como você está usando isso para excluir arquivos, convém testá-lo com um comando não destrutivo primeiro, por exemplo
cat list.txt | xargs cat | xargs echo
Espero poder descrever o que estou tentando fazer bem.
Eu tenho um arquivo de texto com nomes de um monte de .txt
arquivos (não nomes completos de caminho) que existem em um diretório. Cada um dos arquivos tem um caminho (completo) para outro arquivo que eu gostaria de deletar.
O exemplo a seguir deve ajudar.
Suponha que eu tenha um arquivo chamado " list.txt
" e nele haja nomes de arquivos de texto
pathtodelete1.txt
pathtodelete2.txt
something else that is the same as pathtodelete.txt
Cada um desses arquivos tem um caminho armazenado, por exemplo, pathtodelete1.txt
contains /directory/randomfilename.txt
Eu tentei reunir xargs
de várias maneiras sem sucesso.
Em um teste limitado, isso funcionou para mim:
cat list.txt | xargs cat | xargs rm
Como você está usando isso para excluir arquivos, convém testá-lo com um comando não destrutivo primeiro, por exemplo
cat list.txt | xargs cat | xargs echo
while read TXT; do head -1 $TXT | xargs rm; done < list.txt
Este script deve fazer o que você quiser. Você pode comentar as declarações echo
(ou omiti-las totalmente) se não quiser um relatório sobre o que está fazendo.
Remova o :
do início da instrução rm
quando estiver satisfeito de que ele fará o que quiser e, então, ele realmente excluirá os arquivos nomeados.
#!/bin/bash
# Look in list.txt for files containing items to delete
while IFS= read -r file
do
echo "Considering $file" >&2
# Read the path to delete from the file
path="$(cat "$file" 2>/dev/null)"
# If it looks like a pathname try to delete it
if [[ "$path" =~ ^/ ]] && [[ -f "$path" ]]
then
echo "> $path" >&2
: rm -f "$path"
fi
done <list.txt