Gnu/Linux 명령줄 인터페이스(grep, ls 및 cat 사용)에 대한 질문

Gnu/Linux 명령줄 인터페이스(grep, ls 및 cat 사용)에 대한 질문

스택 익스체인지님, 안녕하세요.

내 목표: ls전체 디렉토리 구조를 검색하여 grep파일 을 읽는 cats.py데 사용됩니다 . 나는 이것이 Gnu/Linux의 탄생처럼 들린다는 것을 알고 있습니다.catcats.py

저는 현재 bashStack Exchange를 처음 사용하고 있으므로 형식이 형편없더라도 양해해 주시기 바랍니다.

ls -R -l -t -r | grep cats다음을 반환하는 다음 명령을 실행합니다.

rw-r--r-- 1 user user 2179 Mar 18 08:53 cats.py

위에서 반환된 파일을 읽기 위해 cat을 사용하려고 시도했지만 grep 명령의 결과에 자리 표시자를 할당하는 방법에 문제가 발생했습니다. 여기에 제가 시도한 내용과 결과가 나와 있습니다.

ls -R -l -t -r | grep cats | cat cats.py
cat: cats.py: No such file or directory

문제는 cat 함수를 실행하는 방식에 있다고 생각합니다. 다음과 같아야 합니다.

ls -R -l -t -r | grep cats | cat '{}'

또는

ls -R -l -t -r | grep cats && cat cats.py

답변1

find 명령이 더 적합할 것입니다:

find . -name 'cats.py' -exec cat {} \;

답변2

find명령을 사용하십시오 . 파일을 찾아 명령을 실행할 수 있습니다. ls특히 -l옵션이 제공되면 필요한 것보다 훨씬 많은 데이터(파일 모드, 날짜, 소유자 등)가 있기 때문에 문제가 됩니다.

즉, (<>의 비트를 교체)

find «directory» -name '«file-name-glob-pattern»' -exec «command» {} \;

예를 들어

find . -name 'cats.py' -exec cat {} \;

답변3

대신 find -exec확장된 와일드카드를 사용하세요.

shopt -s extglob
cat **/cats.py

선택 사항: extglob 옵션을 설정 해제합니다.

shopt -u extglob

이는 -exec cat {} +다음 과 유사합니다.-exec cat {} \;

첫 번째 실행은 다음과 같습니다.

cat file1 file2 file3

후자는 다음을 실행합니다.

cat file1
cat file2
cat file3

이 예의 경우 출력은 동일하지만 첫 번째 출력이 더 빠르게 실행됩니다.

답변4

예쁘지는 않지만 원하는 대로 되는 것 같습니다.

cat `sudo ls -R -l -t -r | grep cats | awk '{print $9}'`

cat `sudo ls -R -l -t -r | grep `Local\ State` | awk '{print $9}'`

관련 정보