我从一个基本文件夹中运行了以下命令/

find . -name *.xvi.txt | sort

返回以下排序顺序:
./LT/filename.2004167.xvi.txt
./LT/filename.2004247.xvi.txt
./pred/2004186/filename.2004186.xvi.txt
./pred/2004202/filename.2004202.xvi.txt
./pred/2004222/filename.2004222.xvi.txt

如您所见,文件名遵循常规结构,但文件本身可能位于目录结构的不同部分。有没有一种方法可以忽略文件夹名和/或目录结构,以便排序返回仅基于文件名本身的文件夹/文件名列表?就像这样:
./LT/filename.2004167.xvi.txt
./pred/2004186/filename.2004186.xvi.txt
./pred/2004202/filename.2004202.xvi.txt
./pred/2004222/filename.2004222.xvi.txt
./LT/filename.2004247.xvi.txt

我在find和sort命令下尝试了一些不同的开关,但是没有成功。我总是可以把所有的东西复制到一个文件夹,然后从那里排序,但是有几百个文件,我希望有一个更优雅的选项存在。
谢谢!谢谢你的帮助。

最佳答案

find . -name *.xvi.txt | sort -t'.' -k3 -n

会按你的要求分类的。唯一的问题是文件名或目录名是否包含额外的点。
为了避免这种情况,您可以使用:
find . -name *.xvi.txt | sed 's/[0-9]\+.xvi.txt$/\\&/' | sort -t'\' -k2 | sed 's/\\//'

08-15 17:19