터치 명령 매개변수의 실행 순서

터치 명령 매개변수의 실행 순서

공백으로 구분된 파일 목록이 있고 touch이 명령을 사용하여 해당 타임스탬프를 순차적으로 업데이트하고 싶습니다. 하지만 파일 이름을 매개변수로 제공하면 타임스탬프가 다른 순서로 업데이트됩니다.

touch 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt 

위의 명령을 실행하고 실행한 후 ls -t(수정 시간별로 정렬) 다음을 얻습니다.

1.txt 10.txt 11.txt 12.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt

명령에 인수를 제공하면 실행 순서가 보장되지 않나요? 그렇지 않은 경우 이러한 파일의 타임스탬프를 특정 순서로 어떻게 업데이트할 수 있습니까?

답변1

시간을 지정하지 않으면 touch각 파일을 터치할 때 모든 매개변수의 타임스탬프가 현재 시간으로 변경됩니다. 이렇게 하면 각 파일마다 다른 타임스탬프가 생성되지만 대부분의 경우 이는 모든 매개변수에 적용됩니다. 동일한 타임스탬프를 사용할 수 있습니다. stat접촉된 모든 파일을 실행하여 이를 확인하십시오. 명령줄에 지정된 순서대로 처리됩니다.

원하는 결과를 얻으려면 touch약간의 지연을 두고 각 파일을 개별적으로 반복해야 합니다.

for file in {1..12}.txt; do touch $file; sleep 0.1; done

(대기 시간은 기본 파일 시스템의 타임스탬프 확인에 따라 달라집니다.)

나열된 파일 은 ls -t타임스탬프를 기준으로 내림차순으로 정렬되어 있으므로 확인해야 하는 횟수가 늘어납니다 ls -rt.

답변2

다소 번거로울 수도 있지만 스크립트에 있었다면 for 루프를 사용했을 것입니다.

전임자:

for x in 1.txt 2.txt 3.txt 4.txt [as many as you want here]; do touch $x; done

이렇게 하면 항상 주어진 순서대로 생성됩니다. 물론, 어떤 패턴도 따르지 않고 이름을 무엇이든 변경할 수 있습니다. 예와 같이 이름이나 번호 패턴이 같은 파일을 만드는 경우 다음과 같이 합니다.

for x in $(seq 1 10); do touch $x.txt; done

관련 정보