마지막 수정 날짜를 기준으로 프로그램 실행

마지막 수정 날짜를 기준으로 프로그램 실행

마지막으로 수정된 날짜를 기준으로 디렉터리에 있는 일부 실행 파일을 실행하는 스크립트를 작성해야 합니다. 가장 오래된 것이 먼저 실행되어야 합니다. 어떻게 해야 합니까?

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

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)부분은 zsh와일드카드 한정자입니다. .일반 파일에만 적용됩니다. N일치하는 파일이 없으면 오류를 보고하는 대신 확장이 비어 있고(옵션이 활성화된 것처럼 ) nullglob수정 시 rder Om로 변환됩니다 o(대문자는 역순을 나타냄).m

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

관련 정보