でファイルを削除します。OS X:リストと私はOS Xでこれを行うにはしたいと思いスペース
ls -rt | xargs rm -i
しかし、rm
は、ファイルの一部が空白を持っているという事実に窒息されます。
BSDのバージョンls
には-Q
フラグがないので、OS Xについて言及します。
find -print0
を使用せずにこれを行う方法はありますか?
でファイルを削除します。OS X:リストと私はOS Xでこれを行うにはしたいと思いスペース
ls -rt | xargs rm -i
しかし、rm
は、ファイルの一部が空白を持っているという事実に窒息されます。
BSDのバージョンls
には-Q
フラグがないので、OS Xについて言及します。
find -print0
を使用せずにこれを行う方法はありますか?
すべてのファイルを削除したい場合は、何がrm -i *
が悪いの?この
while read -u 3
do
rm -i "$REPLY"
done 3< <(ls -rt)
あなたのためにそれを削除見つける。
find . -print -depth 1 -exec rm -i {} \;
さらに柔軟性があり、スペースで確認してください。
[[email protected] staCK]$ touch "file name"{1..5}.txt
[[email protected] staCK]$ ls -1
file name1.txt
file name2.txt
file name3.txt
file name4.txt
file name5.txt
[[email protected] staCK]$ ls -rt | xargs -I{} rm -v {}
removed `file name5.txt'
removed `file name4.txt'
removed `file name3.txt'
removed `file name2.txt'
removed `file name1.txt'
OR
[[email protected] staCK]$ ls -1
file a
file b
file c
file d
[[email protected] staCK]$ OLDIFS=$IFS; IFS=$'\n'; for i in `ls -1` ; do rm -i $i ; done ; IFS=$OLDIFS
rm: remove regular empty file `file a'? y
rm: remove regular empty file `file b'? y
rm: remove regular empty file `file c'? y
rm: remove regular empty file `file d'? y
++は 'xargs -I {}'のアプローチになります。第2のアプローチでは、 'set -f'でグロブリングをオフにして(そして後でそれを復元しないかぎり)、リテラルのファイル名を(偶発的な)グロブにすることになります。 – mklement0
をお試しください
2つのオプションがあります。
ls -rt | tr '\n' '\0' | xargs -0 rm -i
か、改行だけに入力を分割するために-Iオプションを使用することができます(
\n
:あなたは、区切り文字としてNUL文字(
\0
)を使用して、引数に入力を分割-0オプションでxargsのを呼び出すことができますいずれか)、入力のライン毎に一度、所望のコマンドを呼び出す:
ls -rt | xargs -I_ rm -i _
差は、第1の個別rm
を呼び出しながら、最初のバージョンのみ、単一のリストとして提供されるすべての引数を指定して、一度rm
を呼び出すことです入力の各行に対して
'ls'出力を構文解析することが許容され、ファイル数が少ないと仮定すると、これはうまくいきます。ただし、カスタムファイル記述子' 3'は必要ありません。 '<<(ls -rt)'と '-u 3 'なしの' read'だけが行います。また、バックラッシュの解釈を避けるために、完全に堅牢な 'read -r'を使用する必要があります。 – mklement0