Usando o conteúdo do arquivo como argumentos várias vezes

1

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.

    
por novice 03.10.2018 / 21:58

3 respostas

2

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
    
por 03.10.2018 / 22:06
0
while read TXT; do head -1 $TXT | xargs rm; done < list.txt
    
por 03.10.2018 / 22:14
0

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
    
por 03.10.2018 / 22:08