Linux bash脚本以查找和删除最古老的文件,并在目录树中在目录树中使用特殊字符和空格删除



我需要一些帮助构建linux bash脚本以查找和删除最古老的文件,并在目录树中使用特殊字符和白色空格。

我一直在搜索论坛上的问题,这要归功于我在这里所看到的输出的用户。到目前为止,我还不知道如何将输出文件名输送到RM,以便将其删除。

目标是检查HDD是否运行,如果如此删除最旧的文件,直到满足自由空间要求为止。问题是,文件名充满了特殊的字符和白色空间...

这是我最终得到的(感谢这里的用户!):

find /mnt/volume0/recordings/ -type f -printf '%T+ %pn' | sort | head -q -n 1 | cat

提供输出:

2016-03-11+19:21:44.2814042100 /mnt/volume0/recordings/some folder (R)/some filename (R)2016-03-1119-00.ts

我如何获得所有特殊的电荷和whitespaces to rm以删除文件的完整路径名来删除文件?

这是回答帖子的输出:

root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %pn' | sort -d |  head -n1
2016-03-11+19:21:44.2814042100 /mnt/volume0/recordings/VIDEO_FILE (R)/VIDEO_FILE (R)2016-03-1119-00.ts
root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %pn' | sort -d |  head -n1 | xargs -I{} echo rm -f "{}"
rm -f 2016-03-11+19:21:44.2814042100 /mnt/volume0/recordings/VIDEO_FILE (R)/VIDEO_FILE (R)2016-03-1119-00.ts
root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %pn' | sort -d |  head -n1 | xargs -I{} rm -f "{}"
root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %pn' | sort -d |  head -n1
2016-03-11+19:21:44.2814042100 /mnt/volume0/recordings/VIDEO_FILE (R)/VIDEO_FILE (R)2016-03-1119-00.ts

编辑:来自Anwered Post1的输出。仍然不工作...

edit2:来自Sorontar建议的输出,仍然不起作用,新建议只给出DIR名称,而不是文件...

新输出:

root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p' | sort -zk1,1 | head -n1 -z | cut -zd ' ' -f2
/mnt/volume0/recordings/Parneviks
root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p' | sort -zk1,1 | head -n1 -z | cut -zd ' ' -f2 | xargs -0 -I{} echo rm -f "{}"
rm -f /mnt/volume0/recordings/Parneviks

虽然最古老的文件是:

root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p' | sort -zk1,1 | head -n1 -z
2016-03-11+19:21:44.2814042100 /mnt/volume0/recordings/Parneviks (R)/Parneviks (R)2016-03-1119-00.ts

有什么建议?

edit3:-f2-而不是-f2使其正常工作。谢谢大家!

正确的行是:

find /mnt/volume0/recordings/ -type f -printf '%T+ %p' | sort -zk1,1 | head -n1 -z | cut -zd ' ' -f2- | xargs -0 -I{} rm -f "{}"

如果您真的想处理带有空格,新行和任何特殊字符的文件,则必须考虑使用null 作为文件名的限制,例如:

dir=/mnt/volume0/recordings
find "$dir"/ -type f -printf '%T+ %p' | 
    sort -zk1,1 | 
    head -n1 -z |
    cut -zd ' ' -f2- |
    xargs -0 echo rm -f --

这将在DIR中找到文件,并有力地将删除最古老的文件(如果将回声删除,请在实际使用之前对其进行测试)。

相关内容

  • 没有找到相关文章

最新更新