/ electronics

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.

zienchan

zienchan

ハードウェアからソフトウェアまで広範囲で何か作ってます

Read More
Linuxで特定のファイルについて任意の処理を適用する方法
Share this