gpt4 book ai didi

Linux bash 脚本,用于在满足条件的情况下查找并删除目录树中具有特殊字符和空格的最旧文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:31 25 4
gpt4 key购买 nike

我需要一些帮助来构建一个 linux bash 脚本,以便在满足条件的情况下查找和删除目录树中包含特殊字符和空格的最旧文件。

我一直在论坛上搜索这样的问题,感谢这里的用户,我得到了如下所示的输出。到目前为止,我不知道如何将输出文件名通过管道传递给 rm,以便将其删除。

目标是检查硬盘是否已满,如果是,则删除最旧的文件,直到满足可用空间要求。问题是,文件名中充满了特殊字符和空格...

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

find /mnt/volume0/recordings/ -type f -printf '%T+ %p\n' | 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

我怎样才能找到文件的完整路径名,所有特殊字符和空格都通过管道传输到 rm 以删除文件?

这是回复帖子的输出:

root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p\n' | 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+ %p\n' | 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+ %p\n' | sort -d | head -n1 | xargs -I{} rm -f "{}"
root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p\n' | 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 建议的输出,仍然无效,新建议只提供目录名称,不提供文件...

新输出:

root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p\0' | sort -zk1,1 | head -n1 -z | cut -zd ' ' -f2
/mnt/volume0/recordings/Parneviks
root@SERVER:~# find /mnt/volume0/recordings/ -type f -printf '%T+ %p\0' | 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\0' | 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

有什么建议吗?

编辑3:-f2- 而不是 -f2 使它工作。谢谢大家!

正确的行是:

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

最佳答案

如果你真的想处理带有空格、新行和任何特殊字符的文件,你必须考虑使用空 \0 作为文件名的限制,如下所示:

dir=/mnt/volume0/recordings

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

这将在目录中查找文件并强制删除最旧的文件(只有一个)(如果删除了 echo,请在实际使用之前对其进行测试)。

关于Linux bash 脚本,用于在满足条件的情况下查找并删除目录树中具有特殊字符和空格的最旧文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com