我必须删除昨天的文件,我正在做这样的事情
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