2012-12-22 3 views
7

쉘 스크립트로 모든 파일을 날짜순으로 정렬하고 싶습니다.쉘 스크립트를 사용하여 파일을 이름순으로 정렬하는 방법

예를 들어, 에는 M1.h, A2.hF4.h 파일이 있습니다.

각 파일의 시간이 다릅니다. 날짜와 시간에 따라 가장 오래된 것부터 현재까지의 모든 파일을 어떻게 정렬합니까? 현재

나는 이름 바꾸기 스크립트가 :

cd /Users/KanZ/Desktop/Project/Test/ 
n=1 
for file in *.jpg; 
do 
    echo $file prefix=M file_name=M$n.jpg 
    echo $file_name n=$(($n+1)) 
    mv $file $file_name 
done 

JPG 파일 M1.jpg, M2.jpgM3.jpg 될 것이지만 처음 내가 스크립트를 실행 나는이 디렉토리에라는 이름의 새 파일 A1.jpg을 추가하고 스크립트를 실행하는 경우 다시 M1.jpg, M2.jpgM3.jpg은 (스크립트를 실행하기 전에이 파일의 이름은 A1.jpg)으로 바뀝니다. 첫 번째 문자는 A이며 M이 오기 때문입니다.

나는 M1, M2, M3M4.jpg을 받고 싶습니다.

+0

질문이 중간에서 변경되었습니다. 그것은'* .h' 파일을 정렬하기 시작했지만 주석과 코드는'* .jpg' 파일을 정렬하는 것을 반영합니다. 일관성은 질문 할 때 중요합니다. –

답변

10

ls 명령을 쉽게 정렬 마지막으로 수정 된 시간을 기준으로 다음 1 포함

$ ls -1tr /Users/KanZ/Desktop/Project/Test 

라인 당 출력 하나 개의 파일에 ls을 알려줍니다

$ ls -1t /Users/KanZ/Desktop/Project/Test 

종류를 역 회전이의 -r 옵션을 포함 추가 메타 데이터 (길이, 수정 시간 등)없이. 추가 처리를 위해 목록을 다른 명령으로 보내야하는 경우 쉘 스크립트에서 필요한 것입니다.

+0

이것은 새로운 것에서 오래된 것으로 분류됩니다. 이것은 물어 본 것이 아닙니다. –

+0

그런 다음'-r' 플래그를 적절하게 사용하여 순서를 변경하십시오. –

3

(질문 변경 때문에 완전히 새로운)

이 시도 : 경우

cd /Users/KanZ/Desktop/Project/Test 
n=1 
for f in `ls -tr *.jpg`; do 
    mv $f M$n.jpg 
    n=$((n + 1)) 
done 
+0

아무 일도 일어나지 않습니다. 파일 형식을 지정해야합니까? 예 : * .h *.jpg – kantawit

+0

무엇을 시도 했습니까? 그 결과는 무엇입니까? (파일의 접미사를 지정할 필요가 없습니다. 지정하지 않으면 모든 파일이 표시됩니다.) –

+0

jpg 파일을 시간순으로 정렬하고 싶습니다. 그런 다음 이름을 A1.jpg와 같은 이름으로 변경하려고합니다. A2.jpg A3.jpg. 이제 모든 파일의 이름을 바꿀 수 있지만 이름을 바꾸기 전에 이전 파일에서 현재 파일로 정렬하고 싶습니다. – kantawit

0

당신이

ls -tUr -d $PWD/* 

이 유용 할 수 있습니다 오름차순으로 파일 경로를 정렬해야하는 경우

0

-t 옵션을 전달해야합니다.3210 명령. -t 옵션은 수정 된 시간순으로 정렬합니다 (즉, 피연산자를 사전 식 순서로 정렬하기 전에 가장 최근에 수정 된 첫 번째 정렬). 즉, 다음 명령을 사용하여 마지막으로 다운로드 한 파일을 표시 할 수 있습니다.

터미널을 열고 다음 명령을 입력하십시오.

ls -t 
관련 문제