目的

特定のファイル名やフォルダについて一括で何かコマンドを実行したい
でも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.