トップ > Linuxらしい使い方を覚える >
端末での作業の実例あれこれ

  

できるだけキーボードで操作することで作業効率を高める

この章の目的は "Linuxならではの生産性・作業効率の高さを活かした使い方を学ぶ" ということでした。 そのためこの章では、端末の開き方・ディレクトリとファイルに関すること・シェルの各種機能・知っておきたいコマンドについて解説してきました。

ただし、具体的な作業の例についてはほとんど紹介することができていません。 この記事では、シェルの機能や各種コマンドを使った効率のよい作業例を紹介します。

特定のテキストを含むファイルをテキストエディタで開く

特定のテキストを含むファイルを探し出し、見つかったファイルをテキストエディタでまとめて開く、ということも簡単に実現できます。

例えば、ホームディレクトリ以下にあるファイルで、拡張子が .txt かつ '今週' というテキストを含むファイルをテキストエディタ(xed)で開く場合は、

taro@myhostname:~$ xed `find ~ -type f -name '*.txt' -exec grep -l 今週 {} \;`

と実行します。

  
{} の部分はfindコマンドによって検索されたファイルのファイルパスに置き換わります。
  
grep コマンドの -l オプションはファイルの中身は表示せずにファイル名のみ表示するためのオプションです。

修正してから一定期間内のXCFファイルをGIMPで開く

修正してから一定期間内のXCFファイルをGIMPで開く、という作業も難しくはありません。

例えば、修正してから3日以内のXCFファイルをGIMPで開く場合は、

taro@myhostname:~$ gimp `find . -mtime -3 -name '*.xcf'`

と実行します。

  
find コマンドの -mtime オプションは最終更新日での条件指定です。 -3 としているので最終更新日が3日以内のファイルが一致します。

JPEGファイルの写真の撮影日時を一覧表示する

JPEGファイルの写真の撮影日時を一覧表示する、ということも簡単に行えます。

例えば、カレントディレクトリにある "2024" で始まるファイル名を持つ JPEG ファイルの撮影日時を知りたいなら、

taro@myhostname:~$ exiftool 2024*.jpg | grep -e 'File Name' -e 'Date/Time Original'

と実行します。

  
exiftool コマンドは、EXIF情報を照会・修正するためのツールである libimage-exiftool-perl に含まれるコマンドです。

なお、libimage-exiftool-perl は標準ではインストールされません。 インストールするためには、

sudo apt update

と実行し、さらに続けて、

sudo apt install libimage-exiftool-perl

と実行します。

  
sudo コマンドを実行するには(あなたの)パスワードの入力が必要です。 sudo コマンドについては別の記事で詳しく紹介します

ファイルサイズが 0 のファイルを探し出して削除する

ファイルサイズが 0 のファイルを探し出して削除する、という作業であれば3通りの方法が思いつきます。 1つ目が find コマンドの -exec オプションを用いる方法で、

taro@myhostname:~$ find -size 0 -exec rm {} \;

と実行します。

2つ目の方法がコマンド置換を使う方法で、

taro@myhostname:~$ rm `find -size 0`

と実行します。

3つ目の方法は xargs コマンドを使う方法で、

taro@myhostname:~$ find -size 0 | xargs rm

と実行します。

  
xargs コマンドは本ウェブサイトでは初登場です。

xargs コマンドは、パイプラインからの入力を引数として別コマンドを実行するコマンドです。 例えば、

echo myfile | xargs rm

は、

rm myfile

と同等です。 なお、引数の位置が別コマンドの末尾でない場合には -i オプションを指定し、

find -size 0 | xargs -i cp {} /tmp

のように記述することができます。 -i オプションにより {} の部分がパイプラインで渡されたテキストで置換されます。

なお {} 以外のテキストを置換させることもできます。 -I オプションを使い、

find -size 0 | xargs -I@@ cp @@ /tmp

のように実行すると @@ の部分がパイプラインで渡されたテキストで置換されます。

特定のテキストAを含むファイルを対象に特定のテキストBを置換する

特定のテキストAを含むファイルを探し出し、見つかったファイル内の特定のテキストBを置換するという作業も1行のコマンドで記述することができます。

例えば、カレントディレクトリ以下にあるファイルで、拡張子が .txt かつ "山田" というテキストを含むファイルを探し出し、"山田" を含む行を対象に "たろう" を "太郎" に置き換えるなら、

taro@myhostname:~$ sed -i '/山田/s/たろう/太郎/g' `find . -type f -name '*.txt' -exec grep -l '山田' {} \;`

と実行します。

  
sed コマンドは複数のファイル名を受け取ることができます。
  
  

まとめ

find コマンドの -exec オプションやシェルのコマンド置換、同じくシェルのパイプラインの機能など、Linux系OSには様々な便利な機能が用意されています。 それらを上手く組み合わせて活用することで、マウス操作よりも効率よく作業を行うことができます。

メニュー