Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2870

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

$
0
0
実行内容 次の条件で「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 に書き出すことにした. 参考にした記事   以上

Viewing all articles
Browse latest Browse all 2870

Trending Articles