알파벳 순서로 스크립트에서 명령 실행

알파벳 순서로 스크립트에서 명령 실행

저는 adb 쉘을 사용하여 Android 기기의 여러 파일에 타임스탬프를 설정하려고 합니다.

어떤 이유로든 제공된 특정 타임스탬프를 사용하여 터치를 실행하면 작동하지 않습니다. 또한 터치를 사용하는 Android busybox 셸에서는 파일 글로빙이 작동하지 않습니다.

그래서 폴더의 모든 파일에 대해 touch 명령을 실행하기 위해 쉘 스크립트를 사용했습니다.

for file in `ls`; do touch "$file"; done

문제는 알파벳 역순으로 실행하고 연속적으로 완료되도록 보장하여 a.png 타임스탬프가 항상 b.png보다 늦도록 명령을 특정 순서로 실행하지 않는다는 것입니다.

가능합니까?

답변1

터치를 사용하여 미래의 시간을 설정할 수 있습니다.

T=$(date +%s)
for file in $(ls | sort -r); do
  touch -t $(date '+%Y%m%d%H%I.%S' --date="@$T") $file
  let T=$T+1
done

sort장치에 없는 경우 busybox설치되어 있는지 확인하세요.

답변2

가능합니까?

예, 아니오. 고성능은 아닙니다. 문제점은 "a.png" 타임스탬프를 항상 지정한다는 것입니다.~ 후에b.png"보다 시간이 더 걸린다는 것은 특정 Makefile이 이를 처리하는 방식과 관련이 있는 것 같습니다. 파일 시스템이 CTIME 마커를 1초 해상도로만 유지한다면 문제가 있을 것입니다. 따라서 다음을 권장합니다.

for file in `ls | sort -r`; do touch "$file"; sleep 1; done

예, 알아요. sleep역겹습니다. 그러나 이것이 바로 make예측 가능한 방식으로 수행해야 하는 작업일 수 있습니다.

관련 정보