dポイントプレゼントキャンペーン実施中!

テキストファイルにリストされたファイルを一括して削除したいのですが、
rm < file.list

としても受け付けてくれません。

cat file.list | rm

もダメでした。

リストされたファイルを削除する方法をご教示頂けますでしょうか?

よろしくお願いします。

A 回答 (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
くらいは思いつくかな.
    • good
    • 0
この回答へのお礼

遅くなって大変申し訳ありません。
非常に良く分かりました。
ご教示大変ありがとうございました。

お礼日時:2010/12/13 18:37

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/20060 …
にあるのを参考にして、
---------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の中身が、ファイル名と空白だけで出来て入ればどの形式でも問題ありません。
    • good
    • 0

リストの形式がわからないので微妙ですが



rm `cat file.lst`
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!