7

我想在 OS X 中这样做:

ls -rt | xargs rm -i

然而,rm令人窒息的是一些文件有空格。

我提到 OS X 是因为 BSD 的版本ls没有-Q标志。

有没有办法做到这一点而不必使用find -print0

4

5 回答 5

4
[sgeorge@sgeorge-ld staCK]$ touch "file name"{1..5}.txt
[sgeorge@sgeorge-ld staCK]$ ls -1
file name1.txt
file name2.txt
file name3.txt
file name4.txt
file name5.txt
[sgeorge@sgeorge-ld 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'

或者

[sgeorge@sgeorge-ld staCK]$ ls -1
file a
file b
file c
file d

[sgeorge@sgeorge-ld 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
于 2013-01-12T05:48:40.337 回答
1

只需为您找到删除它。

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

它更灵活,应该可以使用空格。

于 2013-01-12T05:22:11.963 回答
1

如果要删除所有文件,有什么问题rm -i *

不要解析ls

于 2013-01-12T11:28:30.550 回答
1

你有两个选择。\0您可以使用 -0 选项调用 xargs,该选项使用 NUL 字符 ( ) 作为分隔符将输入拆分为参数:

ls -rt | tr '\n' '\0' | xargs -0 rm -i

或者您可以使用 -I 选项仅在换行符上拆分输入 ( \n) 并为输入的每一行调用一次所需的命令:

ls -rt | xargs -I_ rm -i _

不同之处在于第一个版本只调用rm一次,所有参数作为一个列表提供,而第二个版本rm为输入中的每一行单独调用。

于 2016-09-05T17:37:53.590 回答
0

试试这个

while read -u 3
do
  rm -i "$REPLY"
done 3< <(ls -rt)
于 2013-01-12T05:22:54.143 回答