質問: シェルスクリプト初心者です。 現在macにて 1. itermを起動した時に 2. 当日付のフォルダを作成し(フォルダ名は`mm-dd(月-日)`、`/Users/xxx/Desktop`に作成) 3. 前日より前(1週間)のフォルダ(単、複数両方を想定)が存在し、存在したフォルダの中に`jpgファイル`があれば`ssフォルダ(/Users/xxx/Desktop/ss)`に移動 と条件を満たすシェルスクリプトを作成しています。 `1`、`2`については見当がついていますが、 `3`については * `testコマンド`が使えそう(test -e(ファイル存在チェック)でワイルドカードを使う | コマンドの達人)だったが、 `指定したフォルダ内の特定の拡張子(`jpg`)を探す`といったような感じの方法の記事は見当たらなかった * ファイルの存在確認でワイルドカードを使う - Qiitaを参考にしてみたがうまくいかなかった といった状態で見当がつきません(m_ _m) わかる方がいらっしゃれば教えていただきますようよろしくお願いいたします(m_ _m) ### 動作環境 | mac | High Sierra | | --- | --- | | iTerm2 | 3.3.7 | ### エラー内容 `/Users/xxx/Desktop`に存在する3つのjpgファイルのうちの一つを参照してエラーが発生している? ``` /Users/xxx/Desktop/01-11 find: 15-40-0641.jpg: unknown primary or operator error /Users/xxx/Desktop/01-17 find: 15-40-0642.jpg: unknown primary or operator error ``` ### 期待する動作 * `/Users/xxx/Desktop/mm-dd(過去のフォルダ)`のjpgファイルの存在を確認、判定して条件分岐をさせたい ### 該当しそうなコード ``` desktopPath="/Users/xxx/Desktop/" prevOneWeekArray=($(date -v -7d "+%m-%d") $(date -v -6d "+%m-%d") $(date -v -5d "+%m-%d") $(date -v -4d "+%m-%d") $(date -v -3d "+%m-%d") $(date -v -2d "+%m-%d") $(date -v -1d "+%m-%d")) for prevFolder in ${prevOneWeekArray[@]}; do # 1週間以内のフォルダが存在する場合 if [ -e "${desktopPath}${prevFolder}" ]; then # フォルダ内にjpgファイルの有無を確認したい RES=`find ${desktopPath}${prevFolder} -type f -name *.jpg` if [ $? -ne 0 ]; then # 予期せぬエラーの場合 echo "error" elif [ -z "$RES" ]; then # 存在しない場合 echo "jpg does not exist" else # 存在する場合 echo "jpg exist" fi fi let i++ done ```
回答: findのファイル名指定のやり方が違っています。 シングルクォーテーションで囲んで下さい。 ``` # フォルダ内にjpgファイルの有無を確認したい RES=`find ${desktopPath}${prevFolder} -type f -name '*.jpg'` ```