此问题已在此处有答案:
How to remove files using find and rm command?(3个答案)
4天前关闭。
我最初写了一个命令,以一定的间隔定期删除自动生成的Emacs文件,从我的当前目录开始(在意识到你可以在Emacs中禁用它之前):
#!/bin/sh
clean ()
{
find . -name "*~" -type f | while read f; do rm "$f"; done
}
while true; do clean; sleep 1800; done &
我发现上面的脚本并不总是有效。原因如下:
sh-3.2$ ls
FilenameWithNewLine?End One-Word-Filename Two-Word Filename
sh-3.2$ find . -name "*" -type f
./Two-Word Filename
./One-Word-Filename
./FilenameWithNewLine
End
这就引出了我关于解析文件名的最佳方法的问题,特别是关于管道铣削。
为了清楚起见,我要求一个通用的方法来解析文件名。
下面是另一个例子:
sh-3.2$ ls > myfilenames.txt
sh-3.2$ cat myfilenames.txt | grep 'mypattern'
由于我提到的同样的问题,上述方法将无法工作。
我正在寻找一个一般性的答案,并用例子来说明我的观点。
2条答案
按热度按时间g6baxovj1#
使用POSIX
find
,您可以直接调用rm
:这也适用于更复杂的壳处理:
请记住,如果有大量的输入文件名,则可能会多次调用
-exec
:要处理带有嵌入换行符的文件名,需要一种明确的格式。文件名中不允许使用空值,因此使用空分隔的I/O可以安全地处理任意文件名。
如果你不太担心POSIX兼容性,一些实用程序的实现支持空分隔的输入和/或输出。例如:
1hdlvixo2#
我会怎么做: