Linuxシステムには、アンインストールが必要と判断された複数のファイルを一覧表示するテキストファイルがあります。これらのファイルのいくつかはWindowsで作成され、「1.」または「2.」(つまり、ピリオドの後にテキストスペースがある)などが含まれます.
rm
rm -f
引用符でfilenameコマンドを入力すると、コマンドはそれを削除します。ただし、このコマンドを70万回入力すると発生しません。コマンドに「リスト」ファイルを入力しようとしましたが、名前が不規則なファイルはスキップされます。
とにかく、削除コマンドをスクリプトに入れて自動化された方法で実行できますか?
答え1
私の考えでは、あなたがよく聞く理由の1つに直面していると思います。出力を解析しません。ls
。
つまり、list.txt
削除したいファイル名(1行に1つ)を含めてLinuxスタイルの行末を使用している場合は、次のようにも機能します。
while IFS= read filename
do
rm "$filename"
done < list.txt
これを最初にテストすることをお勧めします(たとえば、ダミーファイルの生成を使用してtouch "1. this is a first test.txt"
から、そのファイル名を含むダミーファイルのtouch "2. my second_file.bla"
生成list.txt
)。
上記のコードをbash
スクリプトに含めるか、次のようにコマンドラインに直接入力できます。
user@host$ while IFS= read filename; do rm "$filename"; done < list.txt
答え2
?
対話型削除は、(疑問符)をワイルドカード文字として使用できます。例えば
rm 1.?
削除されます1.
欠点は、すべてのファイルも削除されることです1.a
。
ファイルのリストが1行に1つのファイルで構成されているlist.txtの場合は、次のものを使用できます。
awk '{printf "rm \"%s\"\n",$0}' file.txt
ビルドコマンド
どこ
$0
全体を減らします(末尾または先行スペースを含む)。
よろしければお試しください
awk '{printf "rm \"%s\"\n",$0}' file.txt |bash