目标:输出 .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
仅将名称限制为常规文件的名称。
然后您想从结果中删除特定的文件名。包含字符串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