.txt
ディレクトリに存在する複数のファイルの名前(フルパス名ではない)を含むテキストファイルがあります。各ファイルには、削除したい他のファイルへの(フル)パスがあります。
list.txt
テキストファイルの名前を持つ""という名前のファイルがあるとしましょう。
pathtodelete1.txt
pathtodelete2.txt
something else that is the same as pathtodelete.txt
これらの各ファイルには、内部的に保存されたパスがありますpathtodelete1.txt
。/directory/randomfilename.txt
私はxargs
成功しなかった様々な組み合わせを試しました。
答え1
限られたテストでは、これは私にとって効果的でした。
cat list.txt | xargs cat | xargs rm
ファイルを削除するために使用するので、まず非破壊的なコマンドを使用してテストしてみることができます。
cat list.txt | xargs cat | xargs echo
答え2
while read TXT; do head -1 $TXT | xargs rm; done < list.txt
答え3
echo
このスクリプトは必要な操作を実行する必要があります。実行に関するレポートを表示したくない場合は、これらの文をコメントアウトするか完全に無視できます。
必要に応じてうまくいくと満足のいくものであれば、:
ドアの先頭から削除すると実際に指定されたファイルが削除されます。rm
#!/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