お世話になります
前提・実現したいこと
指定したディレクトリパス以下から特定条件を満たすファイルだけを
かき集めてzipファイルを作成したいです。
下記のようなファイルが存在していたとして
/home/test
├── 20200429
│ ├── 1.dat
│ ├── 2.dat
│ └── 3.txt
├── 20200430
│ └── 4.dat
└── work
/home/test/workの下に、
各日付フォルダ内の「*.dat」のファイルのみを集めて圧縮したzipファイル
・20200429.zip
├ 1.dat
└ 2.dat
・20200430.zip
└ 4.dat
を作成するのが、やりたいことです。
発生している問題・エラーメッセージ / 試したこと
端末上で実行するコマンドを考えてみましたが、下記実行結果となり、うまく行きませんでした。
# cd /home/test # find . -maxdepth 1 -mindepth 1 -type d -not -path "./work" -exec bash -c "zip -rj .work/$(basename \"{}\").zip {} -i \"*.dat\" " \; zip I/O error: No such file or directory zip error: Could not create output file (.work/./20200430.zip) zip I/O error: No such file or directory zip error: Could not create output file (.work/./20200429.zip)
確認のため、試しにzipコマンドの前に「echo」を入れて実行すると
# find . -maxdepth 1 -mindepth 1 -type d -not -path "./work" -exec bash -c "echo zip -rj .work/$(basename \"{}\").zip {} -i \"*.dat\" " \; zip -rj .work/./20200430.zip ./20200430 -i *.dat zip -rj .work/./20200429.zip ./20200429 -i *.dat
という結果でした。
質問内容
2点、質問があります。
・「$(basename "{}")」の実行結果は、「20200430」になることを期待したのですが、
「./20200430」となってしまいます。
試しに「# basename ./20200430」と打つと「20200430」の結果が得られます。
何故期待した結果と違ってしまうのでしょうか。
・コマンド最後の*.datの部分のダブルクォーテーションが消えています。
ダブルクォーテーションを維持するにはどうすれば良いでしょうか。
追記
コマンド中に誤記がありました。下記に読み替えてください。
× .work/$(basename "{}").zip
○ ./work/$(basename "{}").zip
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/01 01:13 編集