我的 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