私はシノロジーNASを使用しています。削除するファイルのリストがあり、ファイル名にフルパスが一覧表示されますMyfiles.txt
。ファイルには約3000行があり、次のようになります。
"/volume2/NBU/Downloads/AA_To be seen/Life.Itself.2018.1080p.WEB-DL.DD5.1.H264-FGT/RARBG.txt"
"/volume2/nbU/Downloads/AA_To be seen/Find.Me.in.Paris.S01.WEBRip.x264-ION10/Find.Me.in.Paris.S01E16.High.Stakes.Hip.Hop.WEBRip.x264-ION10.mp4"
"/volume2/NBU/Downloads/AA_To be seen/Find.Me.in.Paris.S01.WEBRip.x264-ION10/Find.Me.in.Paris.S01E14.Time.to.Face.the.Music.WEBRip.x264-ION10.mp4"
次のスクリプトを使用しています(ls
後で交換するようにテストされていますrm -f
)。
#!/bin/bash
while IFS="" read -r p;
do
ls "$p"
done < "Myfiles.txt"
残念ながら、スクリプトを実行すると、ループごとに次のメッセージでエラーが発生します。
ls: cannot access "/volume2/NBU/Downloads/AA_To be seen/Life.Itself.2018.1080p.WEB-DL.DD5.1.H264-FGT/RARBG.txt": No such file or directory
ls: cannot access "/volume2/NBU/Downloads/AA_To be seen/Find.Me.in.Paris.S01.WEBRip.x264-ION10/Find.Me.in.Paris.S01E16.High.Stakes.Hip.Hop.WEBRip.x264-ION10.mp4": No such file or directory
ls: cannot access "/volume2/NBU/Downloads/AA_To be seen/Find.Me.in.Paris.S01.WEBRip.x264-ION10/Find.Me.in.Paris.S01E14.Time.to.Face.the.Music.WEBRip.x264-ION10.mp4": No such file or directory
ただし、コマンドラインから直接その行を実行すると機能します。たとえば、
ll "/volume2/NBU/Downloads/AA_To be seen/Find.Me.in.Paris.S01.WEBRip.x264-ION10/Find.Me.in.Paris.S01E14.Time.to.Face.the.Music.WEBRip.x264-ION10.mp4"
出力は次のとおりです。
-rwxrwxrwx+ 1 Pansysadmin users 275337817 Dec 15 2018 /volume2/NBU/Downloads/AA_To be seen/Find.Me.in.Paris.S01.WEBRip.x264-ION10/Find.Me.in.Paris.S01E14.Time.to.Face.the.Music.WEBRip.x264-ION10.mp4
実行スクリプトを使用してもsudo
同じエラーが発生します。
私は何を見落としていますか?
ベストアンサー1
引用符はファイル名の一部ではありません。のようなファイルを削除しようとしていますが、"file.txt"
ファイル名は実際にはですfile.txt
。
touch "file.txt" # shell uses quotes; name is simply file.txt
ls "file.txt" # quotes used by shell; success
ls file.txt # no quotes; success
ls '"file.txt"' # outer quotes used by shell to treat word-with-quotes as literal; failure
ファイル名が正しく(つまり、ファイル名の周りに二重引用符がないように)、ファイル名を変更するか、ループを変更してデータの誤った部分を削除してください。
試してみたばかりのコメントを見ましたsudo
。sudo
なぜ必要なのかまず理解しないで、それに頼らないでください。 (ここでは必要ありません。)そうしないと、ある日システムが提供しようとした保護機能を誤ってバイパスし、システムが損傷する可能性があります。