一括実行系Linuxワンライナーコマンド

4 min読了の目安(約3800字TECH技術記事

Linuxワンライナーコマンド

{数字..数字}による一括実行

  • {01..10}とすることで、01~10までのループ文として実行
    • make等、他のコマンドの引数として利用可能
~/work # echo {01..10}
01 02 03 04 05 06 07 08 09 10
  • {10..01}とすることで、10~01までのループ文として実行
~/work # echo {10..01}
10 09 08 07 06 05 04 03 02 01

for文による一括実行

  • {01..10}をfor文の変数(ここでは変数i)に入れることでループ文として実行
    • 単純にコマンドを指定回数実行することも可能
~/work # for i in {01..10} ; do echo $i; done
01
02
03
04
05
06
07
08
09
10
  • ファイルを10個作成し、出力した例
~/work # for i in {01..10} ; do echo $i >> file_$i ; done
~/work # ll
total 0
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_01
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_02
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_03
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_04
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_05
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_06
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_07
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_08
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_09
-rw-r--r-- 1 root root 3 Oct  5 12:58 file_10
~/work # for i in {01..10} ; do cat file_$i ; done
01
02
03
04
05
06
07
08
09
10

awkコマンド結果をfor文に入れた一括実行

  • awkコマンドにより、出力結果から特定の列を入力とすることでループ文として実行
    • # for i in `[for文の入力としたいコマンド] | [awkコマンド]` ; do echo "$i"; done
      
    • Number 01~Number 10が書かれたファイルを用意し、数字列に記載された名前のディレクトリ(01等)を作成

      • ※echoコマンドは確認のため実行
~/work # for i in {01..10} ; do echo "Number $i" >> file_awk_test ; done
~/work # cat file_awk_test
Number 01
Number 02
Number 03
Number 04
Number 05
Number 06
Number 07
Number 08
Number 09
Number 10
~/work # for i in `cat file_awk_test | awk '{print $2}'` ; do echo "$i"; done
01
02
03
04
05
06
07
08
09
10
~/work # for i in `cat file_awk_test | awk '{print $2}'` ; do mkdir "$i"; done
~/work # ll
total 0
drwxr-xr-x 1 root root 4096 Oct  5 13:40 01
drwxr-xr-x 1 root root 4096 Oct  5 13:40 02
drwxr-xr-x 1 root root 4096 Oct  5 13:40 03
drwxr-xr-x 1 root root 4096 Oct  5 13:40 04
drwxr-xr-x 1 root root 4096 Oct  5 13:40 05
drwxr-xr-x 1 root root 4096 Oct  5 13:40 06
drwxr-xr-x 1 root root 4096 Oct  5 13:40 07
drwxr-xr-x 1 root root 4096 Oct  5 13:40 08
drwxr-xr-x 1 root root 4096 Oct  5 13:40 09
drwxr-xr-x 1 root root 4096 Oct  5 13:40 10
-rw-r--r-- 1 root root  100 Oct  5 13:39 file_awk_test

xargsコマンドによる一括実行

  • 標準入力からリストを読み込み、それをコマンドの引数として実行
    • 01~10のディレクトリを作成し、それらのディレクトリ名を一括で変更する
      ※echoコマンドは確認のため実行
~/work # mkdir {01..10}
~/work # ll
total 0
drwxr-xr-x 1 root root 4096 Oct  5 12:51 01
drwxr-xr-x 1 root root 4096 Oct  5 12:51 02
drwxr-xr-x 1 root root 4096 Oct  5 12:51 03
drwxr-xr-x 1 root root 4096 Oct  5 12:51 04
drwxr-xr-x 1 root root 4096 Oct  5 12:51 05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 06
drwxr-xr-x 1 root root 4096 Oct  5 12:51 07
drwxr-xr-x 1 root root 4096 Oct  5 12:51 08
drwxr-xr-x 1 root root 4096 Oct  5 12:51 09
drwxr-xr-x 1 root root 4096 Oct  5 12:51 10
~/work # find /root/work -mindepth 1 -type d -print0 | xargs -0 -I% echo %
/root/work/01
/root/work/02
/root/work/03
/root/work/04
/root/work/05
/root/work/06
/root/work/07
/root/work/08
/root/work/09
/root/work/10
~/work # find /root/work -mindepth 1 -type d -print0 | xargs -0 -I% mv % %_2020-10-05
~/work # ll
total 0
drwxr-xr-x 1 root root 4096 Oct  5 12:51 01_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 02_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 03_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 04_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 05_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 06_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 07_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 08_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 09_2020-10-05
drwxr-xr-x 1 root root 4096 Oct  5 12:51 10_2020-10-05