Find
如何查找和列印帶有排除項的特定文件路徑?
目標:輸出 .txt 文件,其中包含所有 .html 文件的完整目錄路徑(包括名稱),但 .html 文件名中帶有“txt”或“text”的文件除外。**
我發現以下行為我提供了所需的 .txt 文件以及文件的完整目錄路徑。唯一的問題是它給了我文件夾的所有內容:
ls -d "$PWD"/* > fileList.txt
範例結果:
/Users/username/Desktop/WebsiteFiles/notes.txt /Users/username/Desktop/WebsiteFiles/index.html /Users/username/Desktop/WebsiteFiles/index-TEXT.html /Users/username/Desktop/WebsiteFiles/answers.html /Users/username/Desktop/WebsiteFiles/answers_txt.html /Users/username/Desktop/WebsiteFiles/image.jpg /Users/username/Desktop/WebsiteFiles/image2.jpg /Users/username/Desktop/WebsiteFiles/about.html /Users/username/Desktop/WebsiteFiles/about_TXT.html /Users/username/Desktop/WebsiteFiles/contact.html /Users/username/Desktop/WebsiteFiles/contact_text.html /Users/username/Desktop/WebsiteFiles/images
期望的結果:
/Users/username/Desktop/WebsiteFiles/index.html /Users/username/Desktop/WebsiteFiles/answers.html /Users/username/Desktop/WebsiteFiles/about.html /Users/username/Desktop/WebsiteFiles/contact.html
實驗:
我對使用命令行相當陌生。我一直在嘗試弄清楚這些東西。我發現以下查找有助於查找所有 .html 文件:
find . -iname '*.html'
在父目錄上使用時,它將給我所有 .html 文件,但不是完整的目錄路徑,範例結果:
./index.html ./index-TEXT.html ./answers.html ./answers_txt.html ./about.html ./about_TXT.html ./contact.html ./contact_text.html
我對參數或組裝這些命令不夠熟悉,並且沒有成功列印 .html 文件而沒有名稱中帶有任何“文本”變體的文件。
我有大量文件要查找,並且需要具有完整路徑的 .txt 文件。我想了解這些東西,所以請提供詳細的答复!
find
將使用您提供的路徑輸出找到的名稱,因此您可以開始建構命令find /Users/username/Desktop/WebsiteFiles
或者,如果那是您目前所在的位置,
find "$PWD"
接下來,我們將找到的名稱限制為僅匹配的名稱
*.html
:find "$PWD" -type f -name '*.html'
如果您同時擁有
*.html
and*.HTML
(or*.hTmL
) 文件,並且想要包含這些文件,則更-name
改為-iname
(不區分大小寫的名稱匹配)。我還補充說
-type f
,如果您有任何名稱匹配的目錄*.html
(我們不想在結果中看到這些)。-type f
僅將名稱限制為正常文件的名稱。然後你想從結果中刪除特定的文件名。包含字元串
txt
或text
(大寫或小寫)的名稱。這可以通過否定-iname
測試來完成!
:find "$PWD" -type f -name '*.html' ! -iname "*txt*" ! -iname "*text*"
你有它。
每個“謂詞”(
-type f
等)就像對給定目錄中名稱的測試一樣,並且測試之間存在隱含的邏輯與。如果所有測試都通過,則列印名稱。在我的機器上的一個臨時目錄中執行,其中包含您目錄中的文件(只是用於測試的空文件):
$ ls -l total 24 -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 about.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 about_TXT.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 answers.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 answers_txt.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 contact.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 contact_text.html -rw-r--r-- 1 kk wheel 596 Sep 26 17:46 files -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 image.jpg -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 image2.jpg -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 images -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 index-TEXT.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 index.html -rw-r--r-- 1 kk wheel 0 Sep 26 17:47 notes.txt -rw-r--r-- 1 kk wheel 10240 Sep 26 19:11 test.tar $ find "$PWD" -type f -name '*.html' ! -iname "*txt*" ! -iname "*text*" /tmp/shell-ksh.p56GA7BA/index.html /tmp/shell-ksh.p56GA7BA/answers.html /tmp/shell-ksh.p56GA7BA/about.html /tmp/shell-ksh.p56GA7BA/contact.html