关于如何删除所有文件并仅在每个子目录中保留最新文件(从特定目录开始)有什么建议吗?这是我尝试过的:
#!/bin/bash
find /home/ftp/ -type f | while IFS= read -r line
do
find "$line" -type f | head -n -1 | while read file
do
#rm -f "$file"
echo "$file"
done
done
我在 /home/ftp/upload 和 /home/ftp/download 中有 2 个子目录。两个子目录中每个子目录都有 2 个文件。
当测试上面的脚本时,没有文件名回显。
答案1
使用zsh
, 从当前目录:
for dir (**/*(N/)) {
files=($dir/*(N.om))
(($#files > 1)) && echo rm -f -- $files[2,-1]
}
如果您希望考虑隐藏目录和文件,请添加D
glob 限定符。
那就只考虑常规的文件。如果您想要其他类型的文件,例如设备、套接字、命名管道,或者如果您想遵循符号链接,则可以使用更多 glob 限定符对其进行调整。
删除echo
以实际执行任务。
使用最新的 GNU 工具和 POSIX shell:
(export LC_ALL=C
find . -type f -printf '%T@\t%p\0' |
sort -rzn |
cut -zf2- |
gawk -v RS='\0' -v ORS='\0' '
match($0,/.*\//) && n[substr($0,1,RLENGTH-1)]++' |
xargs -r0 echo rm -f
)