簡體   English   中英

列出文件及其基本目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM