다음을 달성할 수 있는 방법이 있습니까? 나는 내 임무만 수행할 수 있다.
쉘 스크립트를 작성했는데 같은 달에 스크립트가 실행된 경우에만 올바른 출력이 제공됩니다.
다음은 스크립트에서 사용하는 명령입니다.
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
, , head
as -print0
및 -z
NUL 구분 기호 옵션이 필요합니다.
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 date
및 bash
(또는 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)