Lubuntu ワイルドカードを利用する

シェルにはワイルドカードという,ファイル名を補完する機能があります. ワイルドカードを使ってパターンを指定し,長いファイル名を短いタイプでマッチさせたり,複数のファイルにマッチさせたりすることができます. これをシェルのファイル名展開ともいいます.

ファイルを指定するときに使えるワイルドカードには次のようなものがあります。

*(アスタリスク) 任意の文字列(文字がなくてもいい)
?       任意の1文字
[文字列]       []に含まれている文字の内どれか一文字
[!文字列]      []に含まれない1文字
~(チルダ)   ユーザーのホームディレクトリの絶対パス

以上を組み合わせた使用例を書きます。

*.txt*      拡張子がtxtであるすべてのファイル
*Roberta*   文字列Robertaを含むすべてのファイル
*.[opq]*   拡張子がopqのいずれかの文字で始まるすべてのファイル
*.[o-q]*    拡張子がoからqのどれかの文字ではじまるすべてのファイル
[a-zA-Z]*   ファイル名がアルファベットで始まるすべてのファイル
*[0-9]*   ファイル名に数字が含まれているすべてのファイル
[!0-9]*   ファイル名が数字で始まらないすべてのファイル
*.???    拡張子が3文字のすべてのファイル
~/*     ホームディレクトリにあるすべてのファイル
*.o*        拡張子がOで始まるすべてのファイル

“Music/Roberta Sa/”*  ディレクトリ”Music/Roberta Sa/”にあるすべてのファイル※

※ディレクトリ名にスペースが含まれる場合”(ダブルクオーテーションマーク)で囲ってあげることが必要です。ワイルドカード文字は、ダブルクォーテーションの外側に記述します。

lsコマンドでのワイルドカードの動作

lsコマンドでワイルドカードを使うと、子ディレクトリの中身までリストアップしてくれます。

以下実行例です。

user@Dimension-2400C:~$ ls -l “Music/Roberta Sa/”
合計 4
drwxrwxr-x 2 user user 4096 5月 14 20:56 Delirio
user@Dimension-2400C:~$ ls -l “Music/Roberta Sa/”*
合計 41832
-rw-rw-r– 1 user user 3804154 5月 6 09:58 Boca em Boca.opus
-rw-rw-r– 1 user user 3285832 5月 6 09:45 CUm Só Lugar.opus
-rw-rw-r– 1 user user 5584986 5月 6 09:17 Covardia.opus
-rw-rw-r– 1 user user 7018187 5月 6 09:26 Delírio(Selvagem Remix).opus
-rw-rw-r– 1 user user 3092990 5月 6 09:32 Delírio.opus
-rw-rw-r– 1 user user 4391111 5月 6 09:33 Me Erra.opus
-rw-rw-r– 1 user user 3608977 5月 6 09:39 Meu Novo Ilê.opus
-rw-rw-r– 1 user user 3881895 5月 6 09:43 Não Posso Esconder o que o Amor Me Faz.opus
-rw-rw-r– 1 user user 3285832 5月 6 09:48 Um Só Lugar.opus
-rw-rw-r– 1 user user 4856836 5月 6 09:49 Última Forma.opus

上の実行例で、一回目のワイルドカードを付けない実行の場合、子ディレクトリの情報をリストしてくれます。
2回めのワイルドカードを付けた実行の場合、子ディレクトリの中のファイルをリストしてくれます。

Findコマンドにワイルドカードを使った検索

ホームディレクトリで拡張子がOで始まり4文字のファイルを検索してみます。

user@Dimension-2400C:~$ find ~ -name “*.o???”
/home/user/delorio_video/Amanhã é Sábado.opus
/home/user/delorio_video/Se For Pra Mentir.opus
find: `/home/user/.gconf/desktop’: 許可がありません
/home/user/Music/Roberta Sa/Delirio/Delírio(Selvagem Remix).opus
/home/user/Music/Roberta Sa/Delirio/Não Posso Esconder o que o Amor Me Faz.opus
/home/user/Music/Roberta Sa/Delirio/Boca em Boca.opus
/home/user/Music/Roberta Sa/Delirio/CUm Só Lugar.opus
/home/user/Music/Roberta Sa/Delirio/Última Forma.opus
/home/user/Music/Roberta Sa/Delirio/Delírio.opus
/home/user/Music/Roberta Sa/Delirio/Me Erra.opus
/home/user/Music/Roberta Sa/Delirio/Um Só Lugar.opus
/home/user/Music/Roberta Sa/Delirio/Covardia.opus
/home/user/Music/Roberta Sa/Delirio/Meu Novo Ilê.opus

初心者の心配

初心者の私は、こんなことを心配します。

「rm * と間違えて実行してしまえば、ファイルがみんな消えてしまうのではないか?」

そこで、テストディレクトリを作りどういうことが起こるのか検証してみます。

treeコマンドという、ツリー状に、ディレクトリとファイルを表示してくれるコマンドがあるので、それを使って作成したディレクトリの中身を表示します。

user@Dimension-2400C:~/test$ tree
プログラム ‘tree’ はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install tree
user@Dimension-2400C:~/test$ sudo apt install tree
[sudo] user のパスワード:
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
・・・
中略
・・・
user@Dimension-2400C:~/test$ tree
.
├── kotest
│   ├── kotest1
│   ├── kotest2
│   └── magotest
│   ├── himagotest
│   │   ├── himagotest1
│   │   └── himagotest2
│   ├── magotest1
│   └── magotest2
├── test1
└── test2

3 directories, 8 files

以上のようにデフォルトでは、インストールされていないのでインストールしました。
上記のように曾孫ディレクトリまで作成しました。

それでは、rm * を実効。

user@Dimension-2400C:~/test$ rm *
rm: ‘kotest’ を削除できません: ディレクトリです
user@Dimension-2400C:~/test$ tree
.
└── kotest
├── kotest1
├── kotest2
└── magotest
├── himagotest
│   ├── himagotest1
│   └── himagotest2
├── magotest1
└── magotest2

3 directories, 6 files

結果からカレントディレクトリ直下のファイルがすべて削除されることが判明(ここでは、test1、test2が削除されている)。
lsコマンドのように、子ディレクトリまでは、動作が行かないことがわかりました。

ついでに、

cp * デイレクトリ1 は、カレントディレクトリのファイルのみが、ディレクトリ1にコピーされました。(ディレクトリはコピーされない。)

mv * ディレクトリ1 は、カレントディレクトリ配下のすべて(ディレクトリを含む)がそのままディレクトリ1に移動しました。

コマンド名入力時の自動補完

コマンド名を入力するとき、最初の3文字だけ入力して、Tabキーを押すと自動補完してくれます。

投稿者: linux32bit

2017/04よりlubuntuをDimension2400cにインストール。 Linuxの勉強を始める。覚書として学習記録をつづる。

コメントを残す