Find

如何查找和列印帶有排除項的特定文件路徑?

  • September 26, 2017

目標:輸出 .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'

如果您同時擁有*.htmland *.HTML(or *.hTmL) 文件,並且想要包含這些文件,則更-name改為-iname(不區分大小寫的名稱匹配)。

我還補充說-type f,如果您有任何名稱匹配的目錄*.html(我們不想在結果中看到這些)。-type f僅將名稱限制為正常文件的名稱。

然後你想從結果中刪除特定的文件名。包含字元串txttext(大寫或小寫)的名稱。這可以通過否定-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

引用自:https://unix.stackexchange.com/questions/394570