適宜追加/編集予定
シェル
エラーハンドリング
- エラー値返す前に処理を挟みたい。
- 解凍→どっちにしろ削除(出来たかは見てない)→エラー処理(以下)みたいな事をしたい場合。
-
unar "${file}" && rm "${file}" || rm "${file}" ; exit 1
- どう足掻いても
exit 1
。 -
;
を改行として考えると分かりやすいかもしれない。
- どう足掻いても
-
unar "${file}" && rm "${file}" || (rm "${file}" ; exit 1)
- エラーが出た時だけ
exit 1
される。 -
()
で括ると一つのコマンドとして認識される。
- エラーが出た時だけ
-
- 解凍→どっちにしろ削除(出来たかは見てない)→エラー処理(以下)みたいな事をしたい場合。
ディレクトリ操作
mv
- No such file or directory
- 移動させるファイル/ディレクトリが存在しないと出る。
- 移動先の途中ディレクトリが無くても出る。
- 移動+リネームをしたい
-
sourece/before
をtarget/after
に変更したい場合。-
mv source/before target/after
- でも
target/after/before
となる。あれ? - 移動後のディレクトリが存在する場合こうなる。
- でも
-
mv -T source/before target/after
-
target/after
に移動+リネーム出来る。 -
ただ、
target/after
が空ディレクトリでないとエラーを吐く-
mkdir -p target/after
での自動生成と大体セット。
-
- macOSに-Tオプションは無い
-
-
-
find
- 空ディレクトリのみ検出
-
find . -type d -empty -delete
(空ディレクトリを全削除)でよく使う。- でも
-empty
が稀に無い。(alpienとか) -
find . -type d -depth -delete 2>/dev/null
とかで対処
- でも
-
- 検索パス指定
-
find . -iwholename "${dir}/*"
とか -
find . -not -iwholename "${dname}/*"
で除外- 次工程で
grep -F "${name}"
とかする為。
- 次工程で
-
- 文字コードをUTF-8に一括変更
find . -type f -name "*.py$" -exec nkf -wd --overwrite "{}" \;
- 最後を
\;
ではなく+
とするとfind
した結果を一気に渡すので注意。- この場合、
nkf
が一気に渡しても問題無いので動くっちゃ動く。 - ただ並列処理を考えると
+
より\;
の方が良いかも。-
+
だと結果が揃うまで処理が進まないので。
-
- この場合、
grep
- 重複確認
-
find . -type d | grep "${name}" | wc -l
("${name}"
の被り数検索)とか。- でも欲しい結果にならない。
-
"${name}"
にエスケープが必要な文字が含まれている可能性アリ。-
\[]^$*.${}
辺り。
-
-
-F
を使う。find . -type d | grep -F "${name}" | wc -l
-
\[]^$*.
辺りがちゃんとエスケープされる。 -
${}
は多分変数の為にエスケープされない。- 細かくは調べてない。
-
- でも欲しい結果にならない。
-
ファイル操作
unar
- そもそもインストール出来ない場合がある(alpine)。
- 余りにも面倒ならコンパイルしてしまうのも一つの手。
- 自分は出来なかったので(面倒になって)諦めた。
- そしてそれすら面倒になってUbuntuベースのdockerに切り替えてaptで入れるまでがセット。
- 余りにも面倒ならコンパイルしてしまうのも一つの手。
- 別コマンドで対応した場合、ほぼ間違いなく文字コード周りで面倒事が起こる。
unzip
-
unzip -O sjis "${zip}"
でSJIS圧縮されたzipも解凍可能。-
OSによる。
- macOS 10.14.1で
-O
自体無いと言われた。 - Alpineでも
-O
自体が無い。
- macOS 10.14.1で
-
OSによる。