如何查找并打印排除的特定文件路径?

如何查找并打印排除的特定文件路径?

目标:输出 .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 文件。我想了解这个东西,所以请详细回答!

答案1

find将输出找到的名称以及您提供的路径,因此您可以开始构建命令

find /Users/username/Desktop/WebsiteFiles

或者,如果那是您当前所在的位置,

find "$PWD"

接下来,我们将找到的名称限制为仅匹配的名称*.html

find "$PWD" -type f -name '*.html'

如果您同时拥有*.html*.HTML(或*.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

相关内容