【问题标题】:Delete files older than the epoch date of a file in a list删除列表中早于文件纪元日期的文件
【发布时间】: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&lt;epoch' filewithchangeddate
  • @WalterA 你可以发帖我不知道你的意思。
  • @tripleee 那么如何解决?
  • 我发布的脚本修复。如果它没有达到您的预期,也许可以澄清您的实际预期。

标签: linux bash awk scripting find


【解决方案1】:

好的,谢谢三胞胎,我认为这会奏效:

IFS=$'\n'
while read i
        do printf "%s " "$i"
        stat --format=%Z $i
done < <(find /data/owncloud/*/files -type f) > /root/script/newpurge/filelistwithchangeddate


filetodelete=$(expr `date +'%s'` - 2592000)


awk -v epoch="$filetodelete" '$NF<epoch' /root/script/newpurge/filelistwithchangeddate > oldf
iles

awk '{$NF=""}1' /root/script/newpurge/oldfiles > marktodelete
sed -i "s/^/'/g" /root/script/newpurge/marktodelete
sed -i "s/[ ]\+$/'/g" /root/script/newpurge/marktodelete

for i in $(cat /root/script/newpurge/marktodelete)
do
        rm -f $i
done

【讨论】:

    【解决方案2】:

    此答案基于this:

    这可以使用find 轻松完成。通常你会这样做:

    $ find . -type f ! -newermt "@1569314988" -delete
    

    但如果您想从文件中选择时间(来自 OP 的示例):

    $ t=$(awk '{print NF}' file)
    $ [[ "$t" != "" ]] && find . -type f ! -newermt "@${t}" -delete
    

    有关标志含义的详细信息以及可能需要的额外修改,请参阅man find

    【讨论】:

    • Maxdepth 1不好,不知道目录需要走多深
    • @Badb0y 已更新。但要意识到这是一个“通用”的答案,不一定 100% 调整为解决 OP。但是,它可以用来解决 OP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多