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

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

쉘 스크립트를 작성하고 디렉토리를 나타내는 명령줄 인수를 보내야 합니다. 그런 다음 해당 디렉터리에 있는 모든 파일의 모든 파일 이름과 줄 번호를 다시 에코해야 합니다. 또한 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=입력 필드 구분 기호를 null로 설정하면 -r특별한 read처리가 발생하지 않으며 \(따라서 \t탭이 되지 않음) 읽기에 데이터를 구분 하도록 -d ''지시합니다 .read\0

관련 정보