以下を達成する方法はありますか?私は私の使命だけを行うことができます。
シェルスクリプトを作成し、同じ月にスクリプトが実行された場合にのみ正しい出力が提供されます。
以下は、スクリプトが使用するコマンドです。
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
、、、、as sort
、およびNUL区切り文字オプションが必要です。head
-print0
-z
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
ディレクトリがまだ存在しない場合にディレクトリを作成します。また、必要な親ディレクトリも作成されます。ディレクトリがすでに存在する場合、エラーや苦情は発生しません。