스택 익스체인지님, 안녕하세요.
내 목표: ls
전체 디렉토리 구조를 검색하여 grep
파일 을 읽는 cats.py
데 사용됩니다 . 나는 이것이 Gnu/Linux의 탄생처럼 들린다는 것을 알고 있습니다.cat
cats.py
저는 현재 bash
Stack 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}'`