如何比较两个文件名

如何比较两个文件名

我想比较文件夹中的两个文件并删除名称中较小的数字。

例如,假设名字是yearMonthDay.txt。我想和sudo rm它比较一下哪个数字更小。

我知道我可以通过以下方式获取号码:

find *txt | awk -F'[_.]' '{ print $1}'

那么接下来我应该如何比较呢?使用系统变量?其实我以前没有使用过shell变量。

答案1

我建议你做如下的事情:

我创建了一个目录,其中包含一些具有“正常”类似日期名称的文件,一个文件名称中带有空格(使您需要引用)和一个名称中带有换行符的文件(如果命令您使用假设换行符分隔文件)。

$ find
.
./20210710.txt
./20200131.txt
./20210611.txt
./2020?0131.txt
./20201131.txt
./2020 131.txt

以下命令行用于stat帮助findtxt 文件的列表,

$ find -name '*.txt' -exec stat -c '%N' {} \;
'./20210710.txt'
'./20200131.txt'
'./20210611.txt'
'./2020'$'\n''0131.txt'
'./20201131.txt'
'./2020 131.txt'

现在对其进行排序(无需删除扩展即可完成)

$ find -name '*.txt' -exec stat -c '%N' {} \; | sort
'./20200131.txt'
'./20201131.txt'
'./2020 131.txt'
'./2020'$'\n''0131.txt'
'./20210611.txt'
'./20210710.txt'

并选择最旧的一个(位于列表顶部)

$ find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1
'./20200131.txt'

现在您可以通过以下方式删除该文件

rm $(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)

如果存在空格或其他特殊字符的风险,您想引用它(但请仔细检查以避免与之前的引用发生冲突)

rm "$(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)"

您还可以设置一个变量,并在稍后的 shell 脚本中的命令中使用它

#!/bin/bash

find -name '*.txt' -exec stat -c '%N' {} \; | sort

var1=$(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)
echo '---'
read -p "Remove $var1? (y/N) " ans
if [ "$ans" == "y" ]
then
 eval rm "$var1"
fi

相关内容