我有一个长文本文件,其中包含我要删除的文件掩码列表
例:
/tmp/aaa.jpg
/var/www1/*
/var/www/qwerty.php
Run Code Online (Sandbox Code Playgroud)
我需要删除它们.试过rm`cat 1.txt`,它说列表太长了.
找到这个命令,但是当我从列表中检查文件夹时,其中一些仍然有文件
xargs rm <1.txt
手动rm调用从这些文件夹中删除文件,因此没有权限问题.
nos*_*nos 97
这不是很有效,但如果你需要glob模式(如在/ var/www/*中)将会有效
for f in $(cat 1.txt) ; do
rm "$f"
done
Run Code Online (Sandbox Code Playgroud)
如果你没有任何模式,并确保文件中的路径不包含空格或其他奇怪的东西,你可以像这样使用xargs:
xargs rm < 1.txt
Run Code Online (Sandbox Code Playgroud)
aks*_*aks 51
假设文件列表在文件中1.txt
,那么执行:
xargs rm -r <1.txt
Run Code Online (Sandbox Code Playgroud)
该-r
选项导致递归到任何名为的目录1.txt
.
如果任何文件是只读的,请使用该-f
选项强制删除:
xargs rm -rf <1.txt
Run Code Online (Sandbox Code Playgroud)
对任何执行程序删除的工具的输入要小心.请一定在输入文件中指定的文件是真的被删除.看似简单的拼写错误要特别小心.例如,如果在文件及其后缀之间输入空格,则它将显示为两个单独的文件名:
file .txt
Run Code Online (Sandbox Code Playgroud)
实际上是两个单独的文件:file
和.txt
.
这可能看起来不那么危险,但如果拼写错误是这样的:
myoldfiles *
Run Code Online (Sandbox Code Playgroud)
然后,而不是删除打头的所有文件myoldfiles
,你最终会删除myoldfiles
和所有的非点的文件和目录在当前目录.可能不是你想要的.
hek*_*mgl 18
用这个:
while IFS= read -r file ; do rm -- "$file" ; done < delete.list
Run Code Online (Sandbox Code Playgroud)
如果你需要全局扩展,你可以省略引用$file
:
IFS=""
while read -r file ; do rm -- $file ; done < delete.list
Run Code Online (Sandbox Code Playgroud)
但请注意,文件名可以包含"有问题"的内容,我会使用不带引号的版本.想象一下文件中的这种模式
*
*/*
*/*/*
Run Code Online (Sandbox Code Playgroud)
这将从当前目录中删除相当多!我鼓励你以不再需要glob模式的方式准备删除列表,然后像我的第一个例子中那样使用引号.
Ray*_*Ray 14
您可以使用'\n'将新行字符定义为分隔符.
xargs -d '\n' rm < 1.txt
Run Code Online (Sandbox Code Playgroud)
注意-rf,因为如果1.txt包含带空格的路径,它可以删除你不想要的内容.这就是新线分隔符更安全的原因.
在BSD系统上,您可以使用-0选项将新行字符用作分隔符,如下所示:
xargs -0 rm < 1.txt
Run Code Online (Sandbox Code Playgroud)
Mar*_*ago 13
xargs -I{} sh -c 'rm {}' < 1.txt
应该做你想做的事.请小心使用此命令,因为该文件中的一个错误条目可能会导致很多麻烦.
在@tdavies指出原始版本没有进行shell扩展之后编辑了这个答案.
tgd*_*ies 12
你可以使用这个单行:
cat 1.txt | xargs echo rm | sh
Run Code Online (Sandbox Code Playgroud)
这是shell扩展但执行rm
的次数最少.
小智 6
只是提供另一种方式,您也可以简单地使用以下命令
$ cat to_remove
/tmp/file1
/tmp/file2
/tmp/file3
$ rm $( cat to_remove )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
114887 次 |
最近记录: |