Linuxで特定のファイルについて任意の処理を適用する方法
目的
特定のファイル名やフォルダについて一括で何かコマンドを実行したい
でもwhileとか冗長なのは避けたい
環境
- Ubuntu 18.04.2 LTS
shell
※多分bashでもいけるはず
解決策
まずはテストファイルの準備
vm@ubuntu:~/tmp/sand$ echo prefix_a > prefix_a.txt
vm@ubuntu:~/tmp/sand$ echo prefix_b > prefix_b.txt
vm@ubuntu:~/tmp/sand$ echo not_prefix > not_prefix.txt
vm@ubuntu:~/tmp/sand$ ls -la
合計 20
drwxr-xr-x 2 vm vm 4096 Mar 8 16:09 .
drwxr-xr-x 3 vm vm 4096 Mar 8 16:08 ..
-rw-r--r-- 1 vm vm 11 Mar 8 16:09 not_prefix.txt
-rw-r--r-- 1 vm vm 9 Mar 8 16:09 prefix_a.txt
-rw-r--r-- 1 vm vm 9 Mar 8 16:09 prefix_b.txt
特定のprefixから始まるファイルについてcatする
準備
カレントディレクトリに対してprefix_から始まるファイルの内容をコンソールに出力してみることを考えてみる
find -type f -name "prefix_*" | xargs cat
確認
vm@ubuntu:~/tmp/sand$ find -type f -name "prefix_*" | xargs cat
prefix_a
prefix_b
OK.
特定のsuffixで終わるファイルについてcatする
準備
これも先程の"特定のprefixから始まるファイル"と大差なし
"_a"で終わるファイルについて出力することを考えてみる
find -type f -name "*_a.*" | xargs cat
確認
vm@ubuntu:~/tmp/sand$ find -type f -name "*_a.*" | xargs cat
prefix_a
OK.
特定のファイル名でないものについてcatする
準備
これも大差なし。というかfindコマンドの話。
"prefix_"で始まらないファイルについて出力することを考えてみる
find -type f -not -name "prefix_*" | xargs cat
確認
vm@ubuntu:~/tmp/sand$ find -type f -not -name "prefix_*" | xargs cat
not_prefix
OK.
特定のファイルについて結合する
準備
prefix_から始まるファイルについて、結合することを考えてみる
find -type f -name "prefix_*" | xargs cat > join.txt
ソートして順序を揃えたい場合は下のような感じになる...はず
find -type f -name "prefix_*" | sort | xargs cat > join.txt
確認
vm@ubuntu:~/tmp/sand$ find -type f -name "prefix_*" | xargs cat > join.txt
vm@ubuntu:~/tmp/sand$ ls
join.txt not_prefix.txt prefix_a.txt prefix_b.txt
vm@ubuntu:~/tmp/sand$ cat join.txt
prefix_a
prefix_b
vm@ubuntu:~/tmp/sand$
OK.