2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

個人的に詰まったポイントメモ #linux

Last updated at Posted at 2018-11-05

適宜追加/編集予定

シェル

エラーハンドリング

  • エラー値返す前に処理を挟みたい。
    • 解凍→どっちにしろ削除(出来たかは見てない)→エラー処理(以下)みたいな事をしたい場合。
      • 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/beforetarget/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自体が無い。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?