OS X:列出并删除带空格的文件

时间:2013-01-12 05:14:52

标签: macos bash

我想在OS X中执行此操作:

ls -rt | xargs rm -i

然而,rm对某些文件有空格这一事实感到窒息。

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

有没有办法在不必使用find -print0的情况下执行此操作?

5 个答案:

答案 0 :(得分:2)

[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

答案 1 :(得分:1)

只是找到你的删除它。

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

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

答案 2 :(得分:1)

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

Don't parse ls

答案 3 :(得分:1)

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

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

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

ls -rt | xargs -I_ rm -i _

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

答案 4 :(得分:0)

试试这个

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