bash,获取文件名开头前 3 个字符相同的所有文件

bash,获取文件名开头前 3 个字符相同的所有文件

问题

如何获取文件名从开头开始包含前 3 个相同字符的所有文件?

我有

file1.csv
file2.csv
file3.csv (newest)
new-file1.csv
new-file2.csv (newest)
new-file3.csv

我需要

file3.csv (newest)
new-file2.csv (newest)

我尝试过使用数组循环,使用 手动输入条件ls -t,但是简单循环自己执行该操作怎么样?扫描所有文件并获取所有文件?是否可以仅使用for i in $(find . -maxdepth 1 -type f | cut -c1-6 | sort | uniq); do ls -t $i* | head -1; done命令来执行此操作?

谢谢。

答案1

我就是这么做的。

# find last file by 6 first chars, copy to archive
for i in $(find . -maxdepth 1 -type f | cut -c1-6 | sort | uniq)
do
    cp $(ls -t $i* | head -1) $path/archive | head -1
done

谢谢你们。

答案2

如果你想要前导名称的数字,你可以使用数字作为分隔符。它将主要名称$1和扩展名放入$NF(如果将它们拼凑在一起,您将获得 file.csv 或 new-file.csv)。

ls -t | awk -F '[0-9]' '!seen[$1$NF]++' | xargs cp -vt $path/archive --

排序时代; 自 1970-01-01 00:00:00 UTC 以来的秒数,以相反的顺序排列较少的秒数,等于较旧的对象。它必然会按文件名对时间戳进行排序。

find -mindepth 1 -type f -printf '%T@\t%P\0' \
  | sort -z -k1rn | cut -z -f2- \
  | awk -F '[0-9]' 'BEGIN {RS=ORS="\0"} !seen[$1$NF]++' | xargs -0 -n 1

...或者反向排序sort -rz -k1n

相关内容