ls cmd가 필요한 순서대로 파일과 디렉터리를 표시하지 않습니다.

ls cmd가 필요한 순서대로 파일과 디렉터리를 표시하지 않습니다.

mymid_LS 스크립트가 있습니다.

#!/bin/sh
ls -pt

모든 파일과 디렉터리(숨겨지지 않음)를 나열하고 수정 시간별로 정렬해야 합니다.

스크립트를 실행 가능하게 만들었습니다.

chmod 755 my_midLS

저는 3개의 디렉터리와 2개의 파일을 만들었습니다.

$>mkdir dir00 dir01 dir02
$>touch file00 file01

파일은 다음 순서로 표시되어야 합니다.

$>./my_midLS
file01  file00  dir02/  dir01/  dir00/  my_midLS

그러나 다음 순서로 표시됩니다.

file00  file01  dir00/  dir01/  dir02/  my_midLS

유일한 문제는 파일과 디렉터리가 반대쪽에 나타난다는 것입니다.

표시되는 파일 및 디렉터리의 순서를 어떻게 수정할 수 있나요?

답변1

sh짧은 스크립트를 zsh스크립트 로 변환 하는 경우 zsh원하는 순서대로 이름을 정렬하도록 쉘에 요청할 수 있습니다.

#!/bin/zsh

ls -p -fd -- *(om)

여기에는 (om)이전 패턴의 동작을 변경하는 전역 한정자가 있습니다. om"마지막 수정 시간을 기준으로 정렬"을 의미합니다. 그런 다음 변경 순서를 중지 하고 디렉토리의 내용을 나열하지 않는 ls -fd이 이름 목록을 사용하여 호출합니다 .-fls-d

ls명령 외에도 다음을 사용할 수 있습니다 .

print -rC1 -- *(Nom)

-C1목록을 단일 열( )로 인쇄합니다. 백슬래시 시퀀스 해석을 중지합니다 -r. in glob 한정자는 printin 처럼 작동합니다. 즉, 일치하는 항목이 없으면 (오류를 생성하는 대신) 패턴이 빈 상태로 확장됩니다.Nnullglobbash

답변2

이것이 Linux 시스템에 있는 경우 Linux 커널 버그의 피해자입니다.

UNIX에서는 파일 타임스탬프가 uniquetime()사용될 때마다 1초씩 증가하는 함수를 사용하여 생성됩니다.

시스템 시계가 매우 세밀하지 않더라도 다양한 파일 시스템 작업에 고유한 파일 타임스탬프가 부여됩니다.

그러나 Linux에서는 여러 파일 시스템 작업에 대해 동일한 타임스탬프를 얻는 것이 일반적인 것 같습니다.

타임스탬프가 동일하면 파일이 알파벳순으로 정렬됩니다.

관련 정보