不排序的情况下,反向打印Unix find的结果

4
我希望按以下方式对查找结果进行排序:
我正在使用:
find . -type f -print0 

Result is:

/mnt/sdcard/qu/led/t1/temp42.txt
/mnt/sdcard/qu/led/File.plist
/mnt/sdcard/qu/yellow.plist
/mnt/sdcard/SHA1Keys/SHA1SUMS
/mnt/sdcard/File.xml
/mnt/sdcard/File.plist
/mnt/sdcard/.DS_Store

但我想要的结果是:

/mnt/sdcard/.DS_Store
/mnt/sdcard/File.plist
/mnt/sdcard/File.xml
/mnt/sdcard/SHA1Keys/SHA1SUMS
/mnt/sdcard/qu/yellow.plist
/mnt/sdcard/qu/led/File.plist
/mnt/sdcard/qu/led/t1/temp42.txt

如果我这样做:

find . -type f print0 | sort -r 

订单出现了混乱。我在某个地方看到了这个解决方案:
find . -type f -ls | awk '{print $(NF-3), $(NF-2), $(NF-1), $NF}'

但我不能使用它,因为它会打印出结果。

另外请注意,我没有写入文件系统的权限,因此写入文件并反转行不是一个选项。


find 命令的输出已经排序好了。你只需要使用 tac 命令打印反向输出即可。 - jkshah
我认为这个问题应该在Super User而不是Stack Overflow上提问。 - Jazzy Josh
1
你是在使用 -print 还是 -print0?你的输出表明你正在使用 -print - chepner
1
@jkshah find 命令的输出结果并没有以任何特定方式进行 排序。它们看起来像是按照字母顺序的相反顺序排列,但这只是巧合。find 命令的输出顺序取决于文件系统内部存储文件的方式。 - toxalot
2个回答

15

使用tac(即cat 倒序)来反转输出。不需要按相反顺序排序,只需要反转即可。

find . -type f | tac

如果你想保留 -print0,那么可以使用:

find . -type f -print0 | tac -rs '\0'

3
虽然这将颠倒顺序,但它不会按任何特定顺序输出文件。find输出的顺序取决于文件系统内部存储文件的方式。 - toxalot
在OSX上,您可以通过安装coreutils来获取tac - 参见此答案:http://stackoverflow.com/a/32434423/181664,并使用[homebrew](http://brew.sh)。 - Artur Bodera
1
对我来说,这个答案对于文件名中包含 0 的文件无效。 - André

2

或者,你可以使用tail -r

find . -type f | tail -r

1
这仅适用于类似Mac的BSD系统,而不适用于GNU tail - codeforester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接