除外された特定のファイルパスを見つけて印刷する方法は?

除外された特定のファイルパスを見つけて印刷する方法は?

ターゲット:すべての.htmlファイルのフルディレクトリパス(名前を含む)を含む出力.txtファイルとは別に.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など)は、特定のディレクトリの名前に対するテストのように動作し、テスト間に暗黙の論理ANDがあります。すべてのテストに合格すると、名前が印刷されます。

ディレクトリ内のファイルを使用してマイコンピュータの一時ディレクトリで実行する(テスト用の空のファイル):

$ 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

おすすめ記事