0
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 3 years have passed since last update.

【1行野郎】複数パスを対象にディレクトリを列挙するが、特定ディレクトリのみ探索しない

Last updated at Posted at 2021-08-11

実行内容

次の条件で「find パス -type d」をする.

探索対象
・/var/jenkins_home/ 以下
・/home/foo/ 以下

抽出対象外
・「.git」ディレクトリ
・「.cache」ディレクトリ
・エラー出力は破棄する

実行コマンド

$ echo /var/jenkins_home /home/foo | sed 's/\s\+/\n/g' | xargs -I@ find @ \( -type d 2>/dev/null -and \( -name '' -o -name '.git' -o -name '.cacahe' \) -prune \) -or \( -type d -and -print \)

 

コマンドの説明

⬇️ 探索対象ディレクトリを空白区切りにして echo で出力する
$ echo /var/jenkins_home /home/foo | 
  ⬇️ 空白を改行に変換する
  sed 's/\s\+/\n/g' |
  ⬇️ echo で指定されたディレクトリを一つずつ find 実行させる
  xargs -I@ find @ \
                   \(
                      ⬇️ 🛑エラー出力を破棄する (アクセス権なし警告などを破棄する)
                      -type d 2>/dev/null \
                      ⬇️ 且つ
                      -and \
                      ⬇️ 🛑抽出対象外かつ探索対象外のディレクトリ名
                      \( -name '' -o -name '.git' -o -name '.cacahe' \) \
                      ⬇️ 上記の 🛑 2つを除外する
                      -prune \
                   \) \
                   ⬇️ 上記以外を対象にして -type d -and -print を実行する
                   -or \
                   \( -type d -and -print \)

その他
・処理速度を求めていたのでワンライナにしていただけであり、普段は好んでこのような複雑な記述はしない.
・fish shell v2.7.1 でも動作することを確認済み.
・上記コードはときどき使うが、私には暗記できずそのたびに自身のデータ置き場を漁っており効率悪であった.
・そこで、今回自身のメモも兼ねて Qiita に書き出すことにした.

参考にした記事

 

以上

0
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
0
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?