シェルスクリプトでディレクトリ作業ディレクトリを古いディレクトリに変更する

シェルスクリプトでディレクトリ作業ディレクトリを古いディレクトリに変更する

以下を達成する方法はありますか?私は私の使命だけを行うことができます。

シェルスクリプトを作成し、同じ月にスクリプトが実行された場合にのみ正しい出力が提供されます。

以下は、スクリプトが使用するコマンドです。

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ディレクトリがまだ存在しない場合にディレクトリを作成します。また、必要な親ディレクトリも作成されます。ディレクトリがすでに存在する場合、エラーや苦情は発生しません。

おすすめ記事