![](/img/trans.png)
[英]How to list only the file names and not its attributes in a directory( in Linux)?
[英]list the file and its base directory
我的文件夾/ home / sample / * * /*.pdf和* .doc和* .xls等中有一些文件('**'表示某些子目錄。
我需要shell腳本或linux命令以以下方式列出文件。
pdf_docs/xx.pdf
documents/xx.doc
excel/xx.xls
pdf_docs,文檔和excel是目錄,位於/ home / sample中的各個深度。 喜歡
/home/sample/12091/pdf_docs/xx.pdf
/home/sample/documents/xx.doc
/home/excel/V2hm/1001/excel/xx.xls
您可以嘗試以下方法:
for i in {*.pdf,*.doc,*.xls}; do find /home/sample/ -name "$i"; done | awk -F/ '{print $(NF-1) "/" $NF}'
我添加了一行awk,它將僅打印結果的最后2個字段(以'/'分隔)
像這樣嗎
for i in {*.pdf,*.doc,*.xls}; do
find /home/sample/ -name "$i";
done | perl -lnwe '/([^\/]+\/[^\/]+)$/&&print $1'
這個怎么樣?
find /home/sample -type f -regex '^.*\.\(pdf\|doc\|xls\)$'
考慮文件名中的空格,可能的擴展名大小寫
for a in {*.pdf,*.doc,*.xls}; do find /home/sample/ -type f -iname "$a" -exec basename {} \; ; done
編輯編輯以僅考慮文件
您無需像查找一樣調用外部程序來剪切路徑名:
$ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.