제외된 특정 파일 경로를 찾고 인쇄하는 방법은 무엇입니까?

제외된 특정 파일 경로를 찾고 인쇄하는 방법은 무엇입니까?

표적:모든 .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

관련 정보