쉘 스크립트를 작성하고 디렉토리를 나타내는 명령줄 인수를 보내야 합니다. 그런 다음 해당 디렉터리에 있는 모든 파일의 모든 파일 이름과 줄 번호를 다시 에코해야 합니다. 또한 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