- ベストアンサー
リストされた複数のファイルを削除する方法?
テキストファイルにリストされたファイルを一括して削除したいのですが、 rm < file.list としても受け付けてくれません。 cat file.list | rm もダメでした。 リストされたファイルを削除する方法をご教示頂けますでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
file.lst の中身によるけど ・空白文字 (改行を含む) でファイル名が区切られているなら xargs rm < file.lst sed -e 's/^/rm /' | sh while read file; do rm "$file"; done < file.lst ・各行にファイル名が 1つずつあるなら sed -e 's/^/rm "/; s/$/"/' file.lst | sh perl -ne 'chomp; unlink;' file.lst くらいは思いつくかな.
その他の回答 (2)
- toranekosan222
- ベストアンサー率33% (111/332)
pythonを覚えるとファイル処理が便利なのでよく多用します。 普通にbashとawkやsedなどを組み合わせて頑張ったりしても良いし、 perlなどで処理してしまうことも出来ます。 ここでは、python、他にエディタを用いたファイル整形で出きること、shだけで出来る事に関して言及します。 たぶん、大抵のlinuxにはpythonが入っているとおもうので、以下のファイルを作って実行すれば良いです。一応どんな形式でも空白で区切られて入れば対応出来るスクリプトのはず。 rmlist.pyをエディタで作る。 ---rmlist.py---の中身---- import sys import os filepoint=sys.stdin filecont=filepoint.read() filenames=filecont.split() for filename in finenames: ___os.remove(filename) ------------------------- 作ったあとに、(___は空白三文字に置き換えてください。このサイトの使用で空白が無視される) python ./rmlist.py < ./file.list とコマンドラインで実行してやれば良いです。 エディタでできること file.list内に改行を含む場合は、file.listをエディタで開いて、 すべての行の先頭に「rm 」という文字(三文字)を 挿入して、file.shのような名前で保存し、 sh file.sh というコマンドを実行すればファイルは消えますね。 file.list内で改行等がなく、ただ単にfileがスペースをはさんで並んでいる場合は、file.list内の先頭に「rm 」という文字(三文字)を 挿入して、file.shのような名前で保存し、 sh file.sh というコマンドを実行すればファイルは消えますね。 完全にシェルのなかだけで簡潔したいばあいは http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231099/ にあるのを参考にして、 ---------tmp.sh--------- #!/bin/sh BUFIFS=$IFS IFS= exec 3< $1 while read FL 0<&3 do echo "$FL" rm $FL done exec 3<&- IFS=$BUFIFS ----------- をつくって、 ./tmp.sh file.list でも消えます。この方法はfile.listの中身が、ファイル名と空白だけで出来て入ればどの形式でも問題ありません。
- yambejp
- ベストアンサー率51% (3827/7415)
リストの形式がわからないので微妙ですが rm `cat file.lst`
お礼
遅くなって大変申し訳ありません。 非常に良く分かりました。 ご教示大変ありがとうございました。