질문

질문

주문하다:

find . ! -name '*153902*.json' -exec ls -nls {} + | sort -k 10

반품:

12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 ./Flights20180506-151026_KSEA_300.json
12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 Flights20180506-151026_KSEA_300.json
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json

응답의 이 코드는 처음 두 줄 항목이 동일한 파일을 나타내는 것으로 나타남을 보여줍니다. 차이점은 파일 이름 앞에 "./"가 있다는 것입니다. 첫 번째 항목은 무엇을 나타냅니까? 세 번째 항목에 ./가 없는 이유는 무엇입니까?

myname@Metropolitan:~/FlightAwareXML3/Thanksgiving18$ find . ! -name '*153902*.json' -exec ls -nlst {} \; | grep 153902_KATL_0
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json

질문

  1. 자세한 내용은 Google에서 알아보세요./ 구문의 고유 키워드는 무엇입니까?

  2. ./를 사용하여 첫 번째 광고 항목 응답을 제거하는 것이 가능합니까?

답변1

프로세스는 다음과 같습니다.

find . ! -name '*153902*.json'

다음을 반환합니다:

.
./Flights20180506-151026_KSEA_300.json

그런 다음 exec다음을 실행합니다.

ls -nls . ./Flights20180506-151026_KSEA_300.json

그러면 다음과 같은 내용이 제공됩니다 ..

12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 Flights20180506-151026_KSEA_300.json
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json

그리고 ./Flights20180506-151026_KSEA_300.json그 자체.


출력에 표시되는 내용은 기준과 일치하는 파일 이름과 경로를 ./연결한 결과 입니다. .이 동작은 다음에 설명되어 있습니다.POSIX 조회 문서:

각 경로 피연산자는 모든 후행 문자를 포함하여 있는 그대로 평가됩니다. 계층 구조에서 발견되는 다른 파일에 대한 모든 경로 이름은 현재 경로 피연산자가 1로 끝나지 않고 경로 피연산자를 기준으로 한 파일 이름

답변2

를 사용하여 일반 파일을 찾을 때 find다음을 사용하십시오 -type f.

find . -type f ! -name '*153902*.json'

이렇게 하면 특히 .이 경우 디렉터리 이름 일치를 피할 수 있습니다.

관련 정보