마지막 수정 날짜에 따라 프로그램 실행

마지막 수정 날짜에 따라 프로그램 실행

마지막 수정 날짜에 따라 디렉토리에서 일부 실행 파일을 실행하는 스크립트를 작성해야 합니다. 가장 오래된 것이 먼저 실행되어야 합니다. 어떻게 해야 하나요?

이것이 내가 지금까지 한 일이다.

for f in  ./jobqueue/*; #accessing the queue
do 
    chmod +x *  # giving executable permission for the files
    $f  # running the executables
done

답변1

쉘 글로빙은 기본적으로 어휘 순서로 확장됩니다. 다른 정렬 순서가 필요한 경우 zsh이미 zsh구문을 사용하고 있기 때문에 순서 지정을 지원하는 셸이 필요합니다(인용하지 않음 $f).

for f in  ./jobqueue/*(.NOm); do
  chmod +x $f
  $f
done

부분 은 의 글로빙 한정자 (.NOm)입니다 . 일반 파일의 경우에만 오류를 보고하는 대신( 옵션이 활성화된 것처럼) 일치하는 파일이 없으면 아무 것도 확장하지 않고 , 수정 시간 에 rder(역순의 경우 대문자) 로 확장합니다.zsh.NnullglobOmom

GNU 쉘( bash) 및 GNU 를 사용하면 ls다음과 같습니다.

eval "files=($(ls -drt --quoting-style=shell ./jobqueue/* 2> /dev/null))"
for f in "${files[@]}"
  [ -f "$f" ] && [ ! -L "$f" ] || continue
  chmod +x -- "$f"
  "$f"
done

답변2

?파일 이름에 공백, 탭, 줄 바꿈 또는 또는 *또는 이 포함되지 않고 [디렉터리에 하위 디렉터리가 포함되어 있지 않다면 다음과 같이 시도해 볼 수 있습니다.

for f in $(ls -tr ./jobqueue/) ; do

  chmod +x ./jobqueue/$f
  ./jobqueue/$f

done

관련 정보