내가 본 답변 중 어느 것도 나에게 도움이 되지 않았습니다. 다음과 같은 코드가 있습니다.
OLDVER=`readlink current`
OLDDATA=`find ! -newer $OLDVER
내 스크립트에는 이 이름 파일이 필요하기 때문에 FIND 문에서 세 번째 일치 항목만 원합니다.
답변1
파일 이름에 개행 문자가 포함되어 있지 않다는 것을 알고 있으면 다음 명령이 작동합니다.
find
head
세 번째 결과를 사용 하고 추출합니다 tail
.
find <PATH> <EXPRESSION> | head -n 3 | tail -n 1
find
다음을 사용하여 세 번째 결과를 추출합니다 sed
.
find <PATH> <EXPRESSION> | sed '3q;d'
find
다음을 사용하여 세 번째 결과를 추출합니다 awk
.
find <PATH> <EXPRESSION> | awk 'NR==3{print;exit}'
게시물의 명령을 사용하면 다음과 같이 보일 수 있습니다.
find ! -newer "$(readlink current)" | sed '3q;d'
이름에 개행 문자가 포함될 수 있는 파일을 처리하려면 이 -print0
옵션을 사용하여 다음과 같이 결과를 반복할 수 있습니다.
find . -print0 | (\
IFS=$'\0' \
n=0; \
while read -r -d '' line; do \
((n++)); if [[ $n -eq 3 ]]; then \
echo "${line}"; \
break; \
fi; \
done)
이것이 작동하는지 확인하려면 다음 실험과 같은 것을 수행할 수 있습니다.
mkdir /tmp/test
cd /tmp/test
touch $'file1 line1\012file1 line2'
touch $'file2 line1\012file2 line2'
touch $'file3 line1\012file3 line2'
find . -print0 | (\
n=0; \
while read -r -d '' line; do \
((n++)); if [[ $n -eq 3 ]]; then \
echo "${line}"; \
break; \
fi; \
done)
예상대로 다음과 같은 출력이 생성됩니다.
./file3 line1
file3 line2