2013-01-12 7 views

答えて

0

すべてのファイルを削除したい場合は、何がrm -i *が悪いの?この

while read -u 3 
do 
    rm -i "$REPLY" 
done 3< <(ls -rt) 
+0

'ls'出力を構文解析することが許容され、ファイル数が少ないと仮定すると、これはうまくいきます。ただし、カスタムファイル記述子' 3'は必要ありません。 '<<(ls -rt)'と '-u 3 'なしの' read'だけが行います。また、バックラッシュの解釈を避けるために、完全に堅牢な 'read -r'を使用する必要があります。 – mklement0

0

あなたのためにそれを削除見つける。

find . -print -depth 1 -exec rm -i {} \; 

さらに柔軟性があり、スペースで確認してください。

2
[[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 
+0

++は 'xargs -I {}'のアプローチになります。第2のアプローチでは、 'set -f'でグロブリングをオフにして(そして後でそれを復元しないかぎり)、リテラルのファイル名を(偶発的な)グロブにすることになります。 – mklement0

0

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を呼び出すことです入力の各行に対して