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