마지막 수정 사항을 제외하고는 완전히 동일한 PDF 파일인 dirA 및 dirB라는 두 개의 디렉토리가 있다고 가정합니다.
각 파일 이름(항상 dirA, dirB에 있다고 가정)을 검색하고 각 파일 이름에 대해 어떤 파일(dirA/file 또는 dirB/file)이 마지막 수정 시간이 더 큰지 출력할 수 있는 bash 스크립트(awk 없음)는 무엇입니까? 예를 들어
if dirA/file.lastmodified > dirB/file.lastmodified
##take action
답변1
GNU 통계 사용:
shopt -s dotglob
for file in dirA/*; do
[[ -f "dirB/${file##*/}" ]] || continue
if (( "$(stat -c %Y "$file")" > "$(stat -c %Y "dirB/${file##*/}")" )); then
# take action
fi
done
답변2
Bash, ksh, zsh 및 ash에도 한 파일이 다른 파일보다 최신인지 테스트하기 위한 내장 -nt
연산자 [
(및 bash/ksh/zsh 구성 )가 있습니다.[[ … ]]
for x in dirA/*; do
y=dirB/${x#*/}
if [ "$x" -nt "$y" ]; then
# The file in dirA is more recent
elif [ "$y" -nt "$x" ]
# The file in dirB is more recent
else
# The two files have the same modification time
# or the file doesn't exist in dirB
fi
done
답변3
GNU 도구를 사용하여 가능한 솔루션:
find dirA dirB -type f -printf '%T@/%p\0' |
tr '\n\0\t/' '\0\n/\t' |
sort -k3 -k1,1rg |
uniq -f2 |
cut -f2- |
tr '\0/\t' '\n\t/'
dirA 및 dirB(및 해당 하위 디렉터리)의 모든 파일이 보고되지만 두 파일이 공통인 경우 최신 파일만 보고됩니다(또는 두 파일이 동일한 경우 무작위로 보고됨).
이는 와 같은 dirA
값 에만 적용됩니다 . 즉, 공백이나 슬래시 문자를 포함하지 않지만 포함할 수 있는 파일 경로에는 제한이 없습니다.dirB
"dirA"
를 사용하면 -type f
일반 파일만 보고됩니다(symlink, fifo, 장치...는 보고되지 않음).
find
-printf
, g
정렬 유형, uniq
의 옵션 및 NUL 문자 를 -f
처리하는 기능은 GNU에만 적용됩니다.sort
uniq
cut