0

まあ、私は本当に腹を立てています:(私はtest.txtと呼ばれるファイルを持っています.そしてここにそれがあります:

"/var/lib/backup.log"
"/var/lib/backup2.log"

ディレクトリの最初と最後に二重引用符がファイルに含まれており、それらを削除できません。

test.txt 内のファイルを削除するスクリプトを作成しようとしています。このような:

for del in `cat test.txt` ; do
rm -f $del
done

しかし、期待どおりに機能しません:(

次のエラーが発生します。

rm: cannot access "/var/lib/backup.log": No such file or directory
rm: cannot access "/var/lib/backup.log2": No such file or directory
4

4 に答える 4

3

これにより、読み取りエントリの最初と最後から引用文字が削除されます。これは、すべての引用文字を盲目的に削除するよりも優れています(もちろん、ファイル名に表示される可能性があるため)。

また、最初のコードについては、いつ、いつかが本当にわかるまで、常に引用符を使用してください。

while read -r; do
  fname=${REPLY#\"}
  fname=${fname%\"}
  echo rm -f "$fname"
done < myfiles.txt
于 2009-06-27T21:40:14.920 に答える
2

次のワンライナーがそれを行う必要があります:

rm $(tr '\"' '\0' < test.txt)

ここでは、trすべて"をnull(\0)に変換します。ここで、入力は。という名前のファイルからのものですtest.txt。最後にrm、結果が提供されます。

次のPerlワンライナーも同じように使用できます。

perl -nle 's{"}{}g;unlink' test.txt

"から読み取った各行から検索して置換しtest.txtます。次に、unlinkファイルを削除します。

または、

sed 's! !\\ !g' < test.txt | sed 's/"//g' | xargs rm

スペースをエスケープ"し、ファイルを削除して削除します。

于 2009-06-27T15:02:50.180 に答える
0

コマンドがその作業を行うと思いevalます:

for del in `cat test.txt` ; do
  eval rm -f $del
done
于 2014-02-18T13:00:58.333 に答える