디렉토리에 있는 각 파일의 이름과 줄 수를 에코합니다.

디렉토리에 있는 각 파일의 이름과 줄 수를 에코합니다.

디렉토리를 나타내는 명령줄 인수를 보내는 쉘 스크립트를 작성해야 합니다. 그런 다음 해당 디렉토리의 각 파일에 대한 모든 파일 이름과 줄 수를 에코해야 합니다. 또한 10분 이내의 상위 10개 파일에 대해서만 이 작업을 수행해야 합니다.

find "$1" -cmin -10 -type f | head -10 

10분이 지난 파일을 찾아보려고 했으나 오류가 좀 있었습니다. 그리고 이름을 어떻게 얻는지 잘 모르겠습니다. 모든 도움에 미리 감사드립니다.

내 파일 이름은 무료입니다. 내가 얻는 오류는 내 홈 디렉터리를 인수로 전달할 때 권한이 거부된다는 것입니다. 그래서 이름 목록을 얻지 못했습니다. 나는 파일 이름 목록과 각 파일의 줄 수를 모두 얻어야 합니다.

/bin/bash ss1 /home/ivana터미널에 입력하면 다음 오류가 발생합니다.

find: '/home/ivana/.cache/dconf': Permission denied

저는 리눅스를 사용하고 있습니다.

답변1

좋아요, 먼저 할 일이요. 귀하가 받는 오류는 관련이 없습니다. 단지 /home/ivana/.cache/dconf귀하의 특정 하위 디렉터리( )가 $HOME귀하의 소유가 아니라는 의미일 뿐입니다. . sudo​간단한 수정은 다음과 같습니다.

sudo chown -R ivana /home/ivana/

그러면 등에 있는 모든 파일과 디렉터리의 소유권이 $HOME자신의 사용자 이름으로 변경됩니다. 다른 사용자가 올바르게 소유한 항목이 있는 경우 디렉터리의 소유권을 변경하면 됩니다 dconf.

sudo chown -R ivana /home/ivana/.cache/dconf

이제 이 작업을 올바르게 수행하고 임의의 파일 이름을 처리하는 방법은 다음과 같습니다.

find "$1" -cmin -10 -type f -print0 | head -z -n 10 

그러면 개행 문자 대신 find후행 문자가 있는 각 파일이 인쇄되어 이름에 개행 문자가 포함된 파일에서 작동하게 됩니다. \0옵션 -z을 사용하면 구분된 입력을 head읽을 수 있습니다 \0.

다음 단계는 각 파일을 읽고 파일에 포함된 줄 수를 인쇄하는 것입니다.

find "$1" -cmin -10 -type f -print0 | head -z -n 10 |
    while IFS= read -r -d '' file; do wc -l "$file"; done

IFS=입력 필드 구분 기호를 빈 것으로 설정하고 특별 하게 -r처리 read하지 않으며 \(그래서 \t탭이 되지 않음) 구분된 데이터를 읽도록 -d ''지시합니다 .read\0

관련 정보