명령 기본 정렬 순서 찾기


30

linux find 명령으로 반환 된 항목의 기본 정렬 순서는 무엇입니까?

예를 들어, 내가 발행하면

find . -type f -name '*mp3' 

출력은 여러 하위 폴더에 걸쳐 여러 파일로 구성되며 디렉토리가 나열되는 기본 순서는 무엇입니까? 동시에 개별 디렉토리 내의 파일이 나열되는 정렬 순서는 무엇입니까?

때로는 다음을 반환합니다.

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

디렉토리 B의 내용이 먼저 나열되고 그 다음 디렉토리 A의 내용이 어떻게 나열되는지 확인하십시오. 디렉토리 A 내에서 동시에 파일은 재미있는 순서로 나열됩니다.


경험상 설치마다 일관된 것처럼 보입니다. 두 시스템에 동일한 파일 세트가있는 경우 항상 한 시스템에서 하나의 순서를 리턴하고 다른 시스템에서는 완전히 다른 순서를 리턴합니다. 전 +1
James L

1
내 차에 FM 송신기가 있으며 항상 플래시 카드의 노래를 이상한 순서로 재생합니다. 나는 그것을 이해하지 못했지만, 위 명령이 출력을 반환하는 순서와 정확히 같은 순서라는 것을
알았습니다.

BTW : BSD find에는 -s출력을 알파벳순으로 정렬하는 매개 변수가 있습니다.
lapo

답변:


19

find항목이 디렉토리 항목 내에 저장된 순서대로 디렉토리 트리를 순회합니다. 이것은 대부분 같은 머신에서 실행마다 일관되며 삭제가없는 경우 본질적으로 "파일 / 디렉토리 작성 순서"입니다.

그러나 일부 파일 시스템은 압축 작업의 일부로 또는 항목 크기를 확장해야 할 때 디렉토리 항목의 순서를 다시 지정하므로 시간이 지남에 따라 "원시"순서가 변경 될 가능성은 항상 적습니다. 일관된 순서를 원하면 추가 정렬 단계를 통해 출력물을 공급하십시오.


자세한 답변 주셔서 감사합니다! 따라서 FM 송신기 (내 이전 주석 참조)가 find 명령이 나열한 순서대로 트랙을 재생하는 경우 재생 순서를 제어 할 수 없습니다.
Nasko

글쎄, 플래시 카드는 아마도 FAT 파일 시스템을 사용하고 있고, 내가 올바르게 기억한다면, 파일 시스템 디버거를 사용하여 FAT 항목의 순서를 조작하는 것은 매우 쉽습니다. 현재 플래시의 노래를 원하는 순서대로 새 플래시에 복사하는 것이 좋습니다.
Vatine

이러한 일관성의 유용한 응용 프로그램 중 하나는 정렬 된 파일 목록을 얻기 위해 find /path/ -exec ...훨씬 빠르게 실행 하여 느리게 진행되는 진행 상황을 예측 하는 것 find /path/입니다.
Andrey


2

저는 1984/1991 년부터 유닉스 / 리눅스에서 각각 일해 왔으며 제가 처음으로 배운 명령은 찾기였습니다. Linux / GNU는 현재 find 명령에 필요한 모든 것을 넣었으므로 함께 사용하십시오.

찾기 출력을 정렬하는 데 유용한 팁이 있습니다. -printf 옵션은보다 복잡한 정렬 및 파일 정보 표시를 가능하게하는 많은 옵션을 제공합니다. 이와 같은 문제에 가장 적합합니다. 함께 작동하여 무엇이 효과가 있는지 확인하십시오. -printf를 사용하면 원하는 방식으로 결과를 사용자 정의하고 구분할 수 있습니다. 결과를 포스트 프로세스해야 할 때 상당히 도움이됩니다. 나는 이것이 누군가를 돕기를 바랍니다.

  1. -ls를 사용하고 파일 이름을 기준으로 정렬하려는 경우 11 번째 필드는 파일 이름이므로 다음을 수행 할 수 있습니다. sort -k 옵션은 여러 필드를 정렬 할 수도 있습니다.

    / path -ls 찾기 | 정렬 -k11

  2. 날짜 / 시간을 기준으로 오름차순 또는 내림차순으로 더 미세한 입자 컨트롤을 원하면 -printf ""옵션을 사용하십시오. 자세한 내용은 설명서를 참조하십시오. 다음은 초 단위로 인쇄되므로 매우 정확합니다.

예시 날짜 / 시간 : 2016-09-17 + 12 : 09 : 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

날짜 / 시간 문자열에 문자없이이 작업을 수행하는 다른 방법이 있습니다.

예시 날짜 / 시간 : 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.