通过命令删除除多个文件之外的所有文件

通过命令删除除多个文件之外的所有文件

我的 Ubuntu 目录中有多个文件。我想使用终端命令删除今天生成的文件以外的所有文件。

今天是2019-10-15,我的文件是:

...
field_20191012152850.php
field_20191013022128.php
field_20191014095433.php
field_20191015101257.php

文件名包含 4 个部分。第一部分是field_,第二部分是日期(例如20191014= 2019-10-14),第三部分是时间(例如231241= 23:12:41),第四部分是.php

我们可以通过文件信息(例如文件生成日期时间)或文件名(例如)删除这些文件field_20191014095433.php

我可以使用以下命令删除今天的文件:

rm field_$(date +%Y%m%d)[0-9]{6}.php

但我想根据文件生成信息或文件名删除除今天的文件之外的所有文件。我们也可以使用 bash file 代替单行命令。

答案1

您可以使用extglob来排除模式:

shopt -s extglob
rm field_!($(date +%Y%m%d)*).php

您可能希望随后使用来关闭 extglob shopt -u extglob

也可以看看

答案2

你可以这样做find

find /path/to/folder -type f -not -name "field_$(date +%Y%m%d)*.php" -delete

这将递归搜索/path/to/folder匹配的文件。

如果只需要在中查找文件/path/to/folder,而不在其子目录中搜索,只需添加-maxdepth -1标志:

find /path/to/folder -maxdepth 1 -type f -not -name "field_$(date +%Y%m%d)*.php" -delete

相关内容