在 UNIX 中删除特定日期的文件?

在 UNIX 中删除特定日期的文件?

我必须删除昨天的文件,我正在做这样的事情

ls -l | grep 'Feb 15'|awk| xargs

我不能使用 awk,因为我的文件名中有空格,所以我无法在 ls -l 的输出中将它们分隔开。

谁能帮我这个?

答案1

首先要做的事情:


find /path/to/search/ -type f -mtime 1

确保你看到正确的结果 -mtime n 表示 n*24 小时前,然后使用 -print0 来解决空格问题


find /path/to/search/ -type f -mtime 1 -print0

然后删除添加到 xargs 的管道


find /path/to/search/ -type f -mtime 1 -print0 |xargs -0 rm

答案2

我的回答基于您在处理带有空格的文件名时遇到的问题。

我有一个 Linux 应用程序,它必须处理名称中包含嵌入空格的文件。以下是我的 bash shell 脚本的摘录,它允许我使用 for 循环查找这两个文件并对它们执行某些操作。

在我的例子中,是将它们传递给 Clojure 程序,该程序将根据文件的列签名识别文件。这两个文件都是 .csv 文件。关键是更改 IFS,然后在完成后恢复其原始值。如果文件名中有嵌入空格,则允许 $fnam 包含文件名。

# $IFS is internal file separator.
# The following little code snippet takes into account space-separated files.
# We set the file separator value to something other than space.

ORIGINAL_IFS=$IFS
IFS=$(echo -en "\n\b")

# You have to fond both types of files .CSV or .csv. 
#This is the way to do it. cmn 11/1/2012

for fnam in `find bene_gic_in -maxdepth 1 \
-type f \( -name \*.csv -o -name \*.CSV \) \
-exec echo "{}" \;`
do

# Please note that $fnam may have embedded spaces in it, at this point, 
# you could check # for the name, and make a decision about what to do 
# with it, like 
# 

if [ "$fnam" = "a file name i expect" ]; then
# do something.
   mv $fnam file_type1
fi

.
.
.
# Bring back original line separator value.
IFS=$ORIGINAL_IFS

相关内容