我的文件夹/ home / sample / * * /*.pdf和* .doc以及* .xls等中有一些文件('**'表示某个子子目录。
我需要shell脚本或linux命令以下列方式列出文件。
pdf_docs/xx.pdf
documents/xx.doc
excel/xx.xls
pdf_docs,documents和excel是目录,位于/ home / sample中的各种深度。像
/home/sample/12091/pdf_docs/xx.pdf
/home/sample/documents/xx.doc
/home/excel/V2hm/1001/excel/xx.xls
答案 0 :(得分:3)
你可以试试这个:
for i in {*.pdf,*.doc,*.xls}; do find /home/sample/ -name "$i"; done | awk -F/ '{print $(NF-1) "/" $NF}'
我添加了一行awk,它将打印结果的最后2个字段(用'/'分隔)
答案 1 :(得分:2)
这样的东西?
for i in {*.pdf,*.doc,*.xls}; do
find /home/sample/ -name "$i";
done | perl -lnwe '/([^\/]+\/[^\/]+)$/&&print $1'
答案 2 :(得分:0)
这个怎么样?
find /home/sample -type f -regex '^.*\.\(pdf\|doc\|xls\)$'
答案 3 :(得分:0)
考虑文件名中的空格,可能的扩展案例
for a in {*.pdf,*.doc,*.xls}; do find /home/sample/ -type f -iname "$a" -exec basename {} \; ; done
修改强> 编辑只考虑文件
答案 4 :(得分:0)
您无需呼叫外部程序来切断您正在寻找的路径名:
$ filename=/home/sample/12091/pdf_docs/xx.pdf
$ echo ${filename%/*/*}
/home/sample/12091
$ echo ${filename#${filename%/*/*}?}
pdf_docs/xx.pdf
所以,
find /home/sample -name \*.doc -o -name \*.pdf -o -name \*.xls -print0 |
while read -r -d '' pathname; do
echo "${pathname#${pathname%/*/*}?}"
done