Bash 获取路径的最后一个元素(与#10124314不同,因为basename已过时)

Bash 获取路径的最后一个元素(与#10124314不同,因为basename已过时),bash,awk,sed,filenames,Bash,Awk,Sed,Filenames,我需要从bash处理数千个按文件名字母排序的PDF文件。因此,从我的简单角度来看,我需要遍历一棵文件树,边走边剥离路径,然后进行各种grepping、排序等 看到a的答案后,我试着做a tim@MERLIN:~/Documents/Scanned$ basename `find ./ -print` 但有些目录名中有空格,这就把它搞砸了,例如,有一个名为普通字母的目录名,它在工作中起着鸡骨的作用,导致 basename: extra operand ‘Letters’ Try 'basenam

我需要从
bash
处理数千个按文件名字母排序的PDF文件。因此,从我的简单角度来看,我需要遍历一棵文件树,边走边剥离路径,然后进行各种grepping、排序等

看到a的答案后,我试着做a

tim@MERLIN:~/Documents/Scanned$ basename `find ./ -print`
但有些目录名中有空格,这就把它搞砸了,例如,有一个名为
普通字母
的目录名,它在工作中起着鸡骨的作用,导致

basename: extra operand ‘Letters’
Try 'basename --help' for more information.
我看不到一种方法可以让
find
去掉路径名,我更喜欢使用
find
,因为它有太多的选项可以根据年龄、大小等进行过滤。我也看不到任何方法可以让
basename
优雅地处理这种上下文中的空格

我考虑过使用
cut
,但我不知道如何通过像
cut-d/
这样的操作来获得
cut
来给我最后一个字段。我确信一定有一种简单的方法可以做到这一点:某种内联
sed
awk
脚本

我并不特别希望编写一个perl/Python脚本来为我完成这项工作,因为我知道我应该能够从命令行完成这项工作

有什么简单的提示或建议吗

更新/解决 多亏了赛勒斯,解决办法才是

tim@MERLIN:~/Documents/Scanned$ find . -name *.pdf -printf '%f\n' | sort

以下是使用awk的工作解决方案:

find ./ | awk -F'/' '{ print $NF }';
它只是使用
/
作为分隔符,并打印行的最后一个值

或使用
grep

find ./ | grep -oE "[^/]+$"

以下是使用awk的工作解决方案:

find ./ | awk -F'/' '{ print $NF }';
它只是使用
/
作为分隔符,并打印行的最后一个值

或使用
grep

find ./ | grep -oE "[^/]+$"
试试这个:

find ./ -printf '%f\n'

%f
:删除所有前导目录的文件名(仅最后一个元素)。

尝试以下操作:

find ./ -printf '%f\n'


%f
:删除任何前导目录(仅最后一个元素)的文件名。

通过
sed

find ./ | sed 's/.*\/\(.*\)$/\1/g'

通过
sed

find ./ | sed 's/.*\/\(.*\)$/\1/g'

如果要获取
路径名列表(递归),但要按
文件名排序(而不是按路径名排序),可以使用:

find . -printf '%f|%p\n' | sort -k 1 -t'|' | cut -d'|' -f2-
为此,您需要一个
GNU
查找。(Linux正常,不是OS X中的默认值)

如果没有GNU查找,您可以使用以下工具执行上述操作:

find . -print | sed 's:\(.*\)/\(.*\)$:\2\|\1/\2:' | sort -k 1 -t'|' | cut -d'|' -f2-

(假设文件名中没有
\n

如果要获取
路径名列表(递归),但要按
文件名(而不是路径名)排序,可以使用:

find . -printf '%f|%p\n' | sort -k 1 -t'|' | cut -d'|' -f2-
为此,您需要一个
GNU
查找。(Linux正常,不是OS X中的默认值)

如果没有GNU查找,您可以使用以下工具执行上述操作:

find . -print | sed 's:\(.*\)/\(.*\)$:\2\|\1/\2:' | sort -k 1 -t'|' | cut -d'|' -f2-

(假设文件名中没有
\n

请更新您的问题,提供指向“答案10124314”的链接。我想你的意思是。正确的方向递归以及
pushd
popd
可能就是你在这里需要的。只要我的2美分。请更新您的问题,提供“答案”的链接。我想你的意思是。正确的方向递归以及
pushd
popd
可能就是你在这里需要的。就我的2美分。太好了。那正是我想要的<代码>查找-name*.pdf-printf“%f\n”| sort
让我非常接近我需要的地方。完美。那正是我想要的<代码>查找-name*.pdf-printf“%f\n”| sort
让我非常接近我需要的位置。在这种情况下,路径名实际上并不重要:我正在查找文档编号方案中的“漏洞”(因为我怀疑有些文档已被删除或存储在奇怪的地方,或者从未保存过)。但是谢谢你的指导。在这种情况下,路径名实际上并不重要:我在寻找文档编号方案中的“漏洞”(因为我怀疑有些文件已被删除或存储在奇怪的地方或从未保存)。但是谢谢你的指导。