쉘 스크립트에서 디렉토리 작업 디렉토리를 이전 디렉토리로 변경

쉘 스크립트에서 디렉토리 작업 디렉토리를 이전 디렉토리로 변경

다음을 달성할 수 있는 방법이 있습니까? 나는 내 임무만 수행할 수 있다.

쉘 스크립트를 작성했는데 같은 달에 스크립트가 실행된 경우에만 올바른 출력이 제공됩니다.

다음은 스크립트에서 사용하는 명령입니다.

cd $(find /home/application/Files/output/$(date +%Y)/$(date +%m) -type d|sort -r |head -1)

다음은 시스템에 실제로 존재하는 디렉터리 형식이다.

 /home/application/Files/output/2018/01/30

이제 문제는 스크립트를 실행할 때 다음 오류가 발생한다는 것입니다.

 find: `/home/application/Files/output/2018/02': No such file or directory

../2018/02아직 생성되지 않은 디렉토리를 찾고 있으므로 /home/application/Files/output/2018/01/30.

답변1

아직 존재하지 않는 YYYY/MM/DD/ 디렉토리를 검색하는 이유는 무엇입니까?

cd가장 가까운 YYYY/MM/DD/ 디렉터리를 검색하여 찾으세요.

cd "$(find /home/application/Files/output/ -type d \
       -regex '.*/[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]$' -print0 | 
     sort -rVz | head -z -n 1)"

참고: GNU find, sort, , headas -print0-zNUL 구분 기호 옵션이 필요합니다.

PCRE 스타일 정규식을 선호하는 경우 다음을 수행할 수 있습니다.

cd "$(find /home/application/Files/output/ -type d -print0 | 
        grep -z -P '/\d{4}/\d\d/\d\d$' | sort -rVz | head -z -n 1)"

또는 오늘의 디렉터리를 사용해야 하는 경우 비어 있는지 여부에 관계없이 먼저 디렉터리를 생성한 후 cd입력합니다.

dir="/home/application/Files/output/$(date +%Y/%M/%d)"
mkdir -p "$dir"
cd "$dir"

mkdir옵션은 -p디렉토리가 아직 존재하지 않는 경우 디렉토리를 생성합니다. 또한 필요한 상위 디렉터리도 생성됩니다. 디렉토리가 이미 존재하는 경우 오류나 불만이 발생하지 않습니다.

답변2

GNU datebash(또는 ksh93)을 사용하면 오늘의 디렉토리를 선택하지만 해당 날짜에 대한 디렉토리를 찾을 수 없으면 기존 디렉토리를 찾을 때까지 한 번에 하루씩 뒤로 이동합니다(또는 최대 30일까지 뒤로 이동).

for (( i = 0; i < 30; ++i )); do
    dir="/home/application/Files/output/$( date -d "now -$i days" +'%Y/%m/%d' )"
    [ -d "$dir" ] && break
done

if [ ! -d "$dir" ]; then
    echo 'Can not find recent output directory!' >&2
    exit 1
fi

printf 'Using output directory "%s"\n' "$dir"
cd "$dir"

답변3

디렉터리가 항상 같은 날 또는 같은 날짜에 매우 가깝게 생성되는 경우 이름은 다음과 같습니다.

cd $(find /home/application/Files/output/$(date +%Y)/ -mindepth 1 -maxdepth 1 \
  -mtime -2 -type d |sort -r |head -1)

나는 그것을 테스트하지 않았습니다. 최소/최대 깊이가 2가 되어야 할 수도 있습니다. :)

이 솔루션에는 최대 2일의 생성 날짜가 필요합니다. 어쩌면 당신도 조정해야 할 수도 있습니다.

개행 없이:

 cd $(find somepath/$(date +%Y)/ -mindepth 1 -maxdepth 1 -mtime -2 -type d |sort -r |head -1)

관련 정보