
나는 다음 명령을 사용하여 현재 디렉터리 아래의 깊이에 관계없이 가장 큰 10개의 파일을 나열했습니다.
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print $0}'
(저는 다음을 방지하기 위해 awk
대신 사용합니다.head
파이프 파손 오류목록이 너무 긴 경우)
잘 작동하지만 매번 기억하고 입력하기가 확실히 어렵습니다. 이것을 .bash_aliases에 넣으려고 했지만 작동하지 않습니다(빈 줄 10개가 인쇄됩니다).
less
대신 사용하면 awk
출력이 올바르게 표시되지만 이는 상위 파일만 표시하는 것이 아니라 크기별로 정렬된 10MB(내 하한 임계값)보다 큰 파일의 전체 목록을 표시한다는 의미입니다.
그렇다면 awk
여기에서 앨리어싱된 명령의 일부로 질식을 만드는 것은 무엇이며(실제로 문제라고 가정할 때) 이를 해결하려면 어떻게 해야 합니까?
답변1
이 명령을 별칭으로 사용하면 $0
더 이상 작은따옴표로 보호되지 않으므로 쉘 이름으로 변환됩니다. 다음 명령은 이를 보여줍니다.
$ alias F="echo '$0'"
$ F
bash
쉘 이름(아마도 bash
)이 설정되지 않은 경우앗변수 이름으로 인해 빈 줄이 표시됩니다.
쉘 확장으로부터 보호하는 한 가지 방법 $0
은 다음과 같은 것을 사용하는 것입니다.
alias F="find -type f -size +1k -exec ls -gGsSh1 {} + | awk 'NR<=10 {print \$0}'"
그러나 이는 $0
쓸모가 없으므로 명령문에서 제거하면 됩니다 awk
.
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print}'
awk
어쨌든 선택한 줄을 인쇄하는 것이 기본 동작 이므로 더 나아가서 전체 블록을 제거할 수 있습니다 .
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10'
head
또는 오류 메시지를 계속 사용하고 삭제할 수도 있습니다 .
find -type f -size +10M -exec ls -gGsSh1 {} + 2>&1 | head