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
让我非常接近我需要的位置。在这种情况下,路径名实际上并不重要:我正在查找文档编号方案中的“漏洞”(因为我怀疑有些文档已被删除或存储在奇怪的地方,或者从未保存过)。但是谢谢你的指导。在这种情况下,路径名实际上并不重要:我在寻找文档编号方案中的“漏洞”(因为我怀疑有些文件已被删除或存储在奇怪的地方或从未保存)。但是谢谢你的指导。