【发布时间】:2020-02-08 16:50:24
【问题描述】:
我有一个文件,其中包含文件名的完整路径(空格分隔),最后一列我将文件的更改日期放在纪元中。
/data/owncloud/c/files/Walkthrough 2019/#25 SEC-C03/Group Enterprise.jpg 1569314988
我想删除所有纪元数小于 1568187717 的空格分隔文件。
脚本现在看起来像这样,但是如果使用空格分隔,这将无法工作:(
#!/bin/bash
IFS=$'\n'
while read i
do printf "%s " "$i"
stat --format=%Z $i
done < <(find /data/owncloud/*/files -type f) > filelistwithchangeddate
filetodelete=expr `date +'%s'` - 2592000
awk '{print $(NF)}' 具有最后一列编号,因此需要以某种方式将 awk 输出与 filetodelete 进行比较并删除空格分隔的文件。
更新: 我认为应该是这样的:
for i in `cat filelistwithchangeddate `
do
if [ $(awk '{print $(NF)}' $i) -lt $filetodelete ]
then
echo "this will be deleted:"
awk '{$NF=""}1' $i
fi
done
但需要以某种方式修复空格并运行删除
【问题讨论】:
-
你可以使用
find . ! -neweryourFile吗?它还会返回相同年龄的文件,因此我没有将其作为答案发布,也没有添加-rm。 -
你的更新似乎试图用五维椒盐卷饼重新实现
awk -v epoch="$filetodelete" '$NF<epoch' filewithchangeddate。 -
@WalterA 你可以发帖我不知道你的意思。
-
@tripleee 那么如何解决?
-
我发布的脚本是修复。如果它没有达到您的预期,也许可以澄清您的实际预期。
标签: linux bash awk scripting find