use*_*038 735 command-line files rm batch
如何.bak使用一个命令行安全地从当前目录和所有子文件夹中删除具有特定扩展名(例如)的所有文件?简单地说,我害怕使用,rm因为我用错了一次,现在我需要建议。
Rad*_*anu 1181
rm如果你害怕,你甚至不需要在这种情况下使用。使用find:
find . -name "*.bak" -type f -delete
Run Code Online (Sandbox Code Playgroud)
但请谨慎使用。先运行:
find . -name "*.bak" -type f
Run Code Online (Sandbox Code Playgroud)
以准确查看您将删除哪些文件。
另外,请确保这-delete是命令中的最后一个参数。如果你把它放在之前-name *.bak argument,它会删除一切。
查看man find和man rm了解更多信息,并在 SE 上查看此相关问题:
lok*_*ers 51
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 44
首先运行命令shopt -s globstar。您可以在命令行上运行它,它只会在该 shell 窗口中生效。你可以把它放在你的.bashrc, 然后所有新启动的 shell 都会把它捡起来。该命令的作用是**/递归地在当前目录及其子目录中生成匹配文件(默认情况下,**/与*/: 仅在直接子目录中的含义相同)。然后:
rm **/*.bak
Run Code Online (Sandbox Code Playgroud)
(或gvfs-trash **/*.bak或你有什么)。
don*_*oey 23
删除文件对我来说不是你应该使用的东西rm。这是一个替代方案:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
Run Code Online (Sandbox Code Playgroud)
正如 Flimm 在评论中所说:
该软件包
trash-cli与gvfs-trash不依赖 gvfs 的情况相同。
所以:
sudo apt-get install trash-cli
Run Code Online (Sandbox Code Playgroud)
您不需要为此创建别名,因为该trash-cli包提供了一个 command trash,它可以执行我们想要的操作。
正如 Eliah Kagan 在大量评论中明确指出的那样,您也可以使用find. 在这种情况下你不能使用别名,所以下面的命令假设你已经安装了trash-cli. 我总结了以利亚的评论:
此命令查找并显示.bak当前目录或其子目录或以下任何位置的所有文件和符号链接。
find . -name '*.bak' -xtype f
Run Code Online (Sandbox Code Playgroud)
要删除它们,请-exec在trash命令后附加一个:
find . -name '*.bak' -xtype f -exec trash {} +
Run Code Online (Sandbox Code Playgroud)
-xtype f选择文件和文件的符号链接,但不选择文件夹。要删除 .bak 文件夹,请删除该部分,然后使用-execdir,这样可以避免目录中的文件cannot trash non-existent出错:.bak.bak
find . -name '*.bak' -execdir trash {} +
Run Code Online (Sandbox Code Playgroud)
小智 6
如果要删除某种类型的所有文件,但仅从当前文件夹“深层”删除 1 个文件夹:
find . -maxdepth 2 -name "*.log" -type f -delete
Run Code Online (Sandbox Code Playgroud)
-maxdepth 2因为当前目录“ . ”算作第一个文件夹。
递归删除具有所考虑的名称或后缀的所有文件:
\n\nfind . -name '*.pyc' -type f -delete
递归删除具有所考虑名称的所有目录:
\n\nfind ~ -path '*/__pycache__/*' -delete\xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d\nfind ~ -type d -name '__pycache__' -empty -delete\xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d\nRun Code Online (Sandbox Code Playgroud)\n\n控制不太严格,但在一行中:
\n\nfind ~ -path '*/__pycache__*' -delete\nRun Code Online (Sandbox Code Playgroud)[笔记]:
\n\nd是目录选项并且f是文件选项。