이 명령이 있지만 그 기능을 이해하지 못합니다.
ls -Ra | grep -cve/ -e'^\.*$'
"find" 명령을 사용하여 동일한 작업을 수행하려면 어떻게 해야 합니까?
답변1
두 부분으로 나눕니다.
ls -Ra
모든(-a) 파일을 재귀적으로(-R) 나열합니다. -a는 "."으로 시작하는 파일을 의미합니다. 정상적으로 표시되지 않는 문자가 포함됩니다. -R은 ls에서 찾은 모든 하위 디렉터리도 그 안에 있는 모든 하위 디렉터리와 함께 나열된다는 의미입니다.
grep -cve/ -e'^\.*$'
-c는 매핑된 줄 수(이 경우 "ls"에 의해 생성된 파일)를 반환한다는 의미이며, -v는 검색할 패턴을 반전한다는 의미입니다. "/"와 "^.*$"의 두 가지 모드가 있습니다. 첫 번째 패턴은 하위 디렉터리를 나열하는 줄이 되는 "/" 문자가 포함된 줄과 일치합니다. 두 번째 패턴은 "." 이름이 0개 이상인 파일과 일치합니다. 수치.
검색이 역순으로 이루어지기 때문에 두 패턴 중 어느 것과도 일치하지 않는 행이 출력된다는 의미입니다. 그리고 -c 옵션이 지정되었기 때문에 이는 단지 인쇄됩니다.숫자비교할 수 없는 라인.
"'find' 명령을 사용하여 동일한 작업을 어떻게 수행할 수 있나요?"라고 묻는 경우가 있습니다.
find 명령은 개수를 출력하지 않으므로 다음과 같이 "wc"로 파이프해야 합니다.
find . | wc -l
여기에는 "."이 포함됩니다. 그러나 따라서 "ls | grep" 버전보다 답이 하나 더 많아지게 됩니다.
내 컴퓨터의 디렉토리에서:
mmusante$ ls -Ra | grep -cve/ -e'^\.*$'
170594
mmusante$ find . | wc -l
170595
mmusante$