すべてを

▼開く

閉じる▲

ファイル名に「-」を含むファイルを削除する

○ファイル「-file」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 18:40 -file

rmコマンドでファイルを指定する
$ rm -- -file

rmコマンドで、「--」削除するファイル「-file」指定すると、ファイル「-file」が削除される。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm -file
rm: オプションが違います -- l

rmコマンドは、ファイル名「-file」をオプションと解釈してしまう。
「-」をオプションと解釈させないためにエスケープ文字を使ってみる。

$ rm \-file
rm: オプションが違います -- l
$ rm '-file'
rm: オプションが違います -- l
$ rm "-file"
rm: オプションが違います -- l

どれもうまくいかない。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls -file
ls: オプションが違います -- e
$ ls \-file
ls: オプションが違います -- e
$ ls '-file'
ls: オプションが違います -- e
$ ls "-file"
ls: オプションが違います -- e

ファイル名を「\-file」、「'-file'」、「"-file"」と指定しても、lsコマンドは「-file」をファイル名ではなくオプションと解釈してしまう。lsコマンドのオプションに「f,i,l」はあるが「e」がないため、「オプションが違います」というエラーになる。

lsコマンドでファイルが正しく指定できた例
$ ls -- -file
-file

lsコマンドのオプションに「--」を指定し、ファイル名「-file」を指定すると正しくファイル「-file」が表示される。これは、「--」が空のオプションを指定するからと推測される。

特定の拡張子を持つファイルをすべて削除する

○ワイルドカード「*」を使って拡張子が「.jpg」のファイルを削除する

lsコマンドで削除するファイルを見る
$ ls
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

rmコマンドで削除するファイルを指定する
$ rm *.jpg

rmコマンドで削除するファイルを「*.jpg」と指定すると、拡張子が「jpg」のファイルがすべて削除される。

lsコマンドで実行結果を確認する
$ ls
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

アスタリスク「*」は、0文字以上の任意の文字列を意味するメタキャラクタで、ワイルドカードと呼ばれる。シェルがこれを解釈してコマンドを実行する。

最初の「*」は、ファイル名の本体がどのような名前でもよいことを意味し、「.jpg」は拡張子を「jpg」に特定している。つまり、「ファイル名.拡張子」型のファイルで拡張子に「jpg」を持つファイルを意味する。

○lsコマンドでファイルの指定方法を確認する

目的のファイルを正しく指定するために、lsコマンドでファイルの指定方法を試してみる。

$ ls *.jpg
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg

ファイルを「*.jpg」と指定すると、拡張子が「.jpg」のファイルがすべて表示される。

特定の拡張子(複数)を持つファイルをすべて削除する

○ワイルドカード「*」を使って拡張子が「.tif」と「.tiff」のファイルを削除する

lsコマンドで移動するファイルを見る
$ ls
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

rmコマンドで削除するファイルを指定する
$ rm *.ti*

rmコマンドでファイルを「*.ti*」と指定すると、拡張子が「.tif」と「.tiff」のファイルが削除される。
ファイルを「*.tif*」と指定しても同様の結果が得られる。

lsコマンドで実行結果を確認する
$ ls
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg

ワイルドカードの「*」は、0文字以上の任意の文字を意味するため、1文字目の「*」はすべてのファイル名を指定し、後の「.ti*」は拡張子の「.ti」以降にどのような文字がきてもよいことを意味する。「*」の場合は0文字以上なので、「.ti」以降が0文字の「.ti」にも5文字の「.tiffany」にもマッチする。しかし、このディレクトリには拡張子が「.jpg」と「.tif」と「.tiff」しかないので、「.tif」と「.tiff」だけにマッチする。

○lsコマンドでファイルの指定方法を確認する

目的のファイルを正しく指定するために、lsコマンドでファイルの指定方法を試してみる。

$ ls *.ti*
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif
$ ls *.tif*
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

ファイルを「*.ti*」あるいは「*.tif*」と指定すると、拡張子が「.tif」と「.tiff」のファイルがすべて表示される。

バックアップファイルを削除する

○チルダ「~」の付いたバックアップファイルを一括して削除する

lsコマンドで削除するファイルを見る
$ ls
file1.txt   file2.txt   file3.txt   file4.txt   file5.txt
file1.txt~  file2.txt~  file3.txt~  file4.txt~  file5.txt~

rmコマンドでワイルドカードを使ってファイルを指定する
$ rm *.*~

rmコマンドでワイルドカードを使ってファイル名を「*.*~」と指定すると、拡張子が「.txt~」のファイルが削除される。

アスタリスク「*」は、0文字以上の任意の文字列を意味するメタキャラクタで、ワイルドカードと呼ばれる。シェルがこれを解釈してコマンドを実行する。

「*.*~」の意味するところは、最初の「*」はファイル名の本体がどのような名前でもよいことを意味し、「.」は必ず必要、次の「*」は拡張子もどのような名前でもよく、最後に「~」があるファイルを指定している。
つまり、「ファイル名.拡張子」型のファイルで最後にチルダ「~」が付くファイルを意味する。

○lsコマンドでファイルの指定方法を確認する

目的のファイルを正しく指定するために、lsコマンドでファイルの指定方法を試してみる。

lsコマンドでファイルが正しく指定できた例
$ ls *.*~
file1.txt~  file2.txt~  file3.txt~  file4.txt~  file5.txt~

シンボリックリンクファイルを削除する

○シンボリックリンクファイル「s-linkfile」を削除する

lsコマンドで削除するファイルを見る
$ ls -lR
.:
合計 4
drwxr-xr-x    2 masa     users        4096  7月 30 18:43 dir
lrwxrwxrwx    1 masa     users           8  7月 30 19:02 s-linkfile -> dir/file

./dir:
合計 4
-rw-r--r--    1 masa     users         256  4月  2 17:39 file

rmコマンドでシンボリックリンクファイルを指定する
$ rm s-linkfile

rmコマンドで、削除するシンボリックリンクファイル「s-linkfile」を指定すると、シンボリックリンクファイルが削除される。

lsコマンドで実行結果を見る
$ ls -lR
.:
合計 4
drwxr-xr-x    2 masa     users        4096  7月 30 18:43 dir

./dir:
合計 4
-rw-r--r--    1 masa     users         256  4月  2 17:39 file

rmコマンドでは、シンボリックファイルが削除されてリンクが消滅するだけで、元のファイルは削除されない。リンク元のファイルを削除したい場合は、rmコマンドでリンク元のファイルを指定して削除する。一度にシンボリックリンクファイルとリンク元のファイルの両方を削除するコマンドはない。

ハードリンクファイルを削除する

○ハードリンクファイル「h-linkfile」を削除する

lsコマンドで削除するファイルを見る
$ ls -lR
.:
合計 8
drwxr-xr-x    2 masa     users        4096  7月 30 18:43 dir
-rw-r--r--    2 masa     users         256  4月  2 17:39 h-linkfile

./dir:
合計 4
-rw-r--r--    2 masa     users         256  4月  2 17:39 file

rmコマンドでハードリンクファイルを指定する
$ rm h-linkfile

rmコマンドで、削除するハードリンクファイル「h-linkfile」を指定すると、ハードリンクファイルが削除される。

lsコマンドで実行結果を見る
$ ls -lR
.:
合計 4
drwxr-xr-x    2 masa     users        4096  7月 30 18:43 dir

./dir:
合計 4
-rw-r--r--    1 masa     users         256  4月  2 17:39 file

ハードリンクファイルは、普通のファイルと同様に削除することができる。そのため、普通のファイルと思って削除しても、ハードリンクファイルが残っていたりすることがあるので、注意しなくてはならない。

また、ハードリンクファイルは、通常のファイルとはリンク数の表示で区別するしかない。どのファイルとハードリンクが張られているかを調べる方法はない。lsコマンドのiオプションでi-ノード番号を表示させて、これから同じi-ノードを見つけ出す方法ぐらいしかない。

ファイル名に「'」と「*」を含むファイルを削除する

○ファイル「'*'」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 22:57 '*'

rmコマンドでファイルを指定する
$ rm \'\*\'
または
$ rm "'*'"

rmコマンドで、削除するファイルのファイル名を1文字ずつエスケープ記号「\」でエスケープすると、ファイル「\'\*\'」が削除される。エスケープ記号を使う代わりに、ファイル名を2重引用符「"」で囲ってもよい。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm '*'
rm: cannot lstat `*': そのようなファイルやディレクトリはありません

これは、rmコマンドに「*」というファイル名が渡されるためにこのようなエラーとなる。ただし、実際に「*」というファイルがあれば削除されてしまう。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls '*'
ls: *: そのようなファイルやディレクトリはありません
$ ls ''*''
ls: オプションが違います -- e

これは、シェルが「'」と「'」に囲まれた「*」をファイル名と解釈してlsコマンドに与えたためにこのようなエラーになる。この場合、ファイル名が「*」のファイルがあればエラーとならずにファイル「*」が表示される。

lsコマンドでファイルが正しく指定できた例
$ ls \'\*\'
'*'
$ ls "'*'"
'*'

シェルが「'」を解釈しないようにエスケープ文字「\」を「'」の前に入れて「\'\*\'」とするか、二重引用符で囲って「"'*'"」と指定すると正しくファイル「'*'」が表示される。

特定のファイル名を持つファイルをすべて削除する

○ワイルドカード「?」を使って番号が200番台のファイルを削除する

lsコマンドでディレクトリの内容を見る
$ ls
IMG0006.JPG  IMG0012.JPG  IMG0017.JPG  IMG0171.JPG  IMG0280.JPG
IMG0009.JPG  IMG0015.JPG  IMG0134.JPG  IMG0263.JPG  IMG0294.JPG

rmコマンドで削除するファイルを指定する
$ rm IMG02??.JPG

rmコマンドで、削除するファイルを「IMG02??.JPG」と指定すると、200番台のファイルが削除される。

lsコマンドで実行結果を確認する
$ ls
IMG0006.JPG  IMG0012.JPG  IMG0017.JPG  IMG0171.JPG
IMG0009.JPG  IMG0015.JPG  IMG0134.JPG

ワイルドカードの「?」は、任意の1文字を意味するので、「IMG02??.JPG」は「IMG02」の後の「??」の場所に任意の文字が2文字あるファイルを意味する。であるから、「IMG0200.JPG」のように数字が入ってもよいし「IMG02AB.JPG」のようにアルファベットが入ってもよい。このディレクトリにあるファイルでは、「IMG0263.JPG」「IMG0280.JPG」「IMG0294.JPG」の3つのファイルが該当する。

○lsコマンドでファイルの指定方法を確認する

目的のファイルを正しく指定するために、lsコマンドでファイルの指定方法を試してみる。

lsコマンドでファイルを指定する
$ ls IMG02??.JPG 
IMG0263.JPG  IMG0280.JPG  IMG0294.JPG

ファイル名に「~」を含むファイルを削除する

○ファイル「~masa」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 21:28 ~masa

rmコマンドでファイルを指定する
$ rm '~masa'
または
$ rm "~masa"
または
$ rm \~masa

rmコマンドで、上のようにファイルを指定するとファイル「~masa」が削除される。

○ホームディレクトリに該当しないファイル名の場合

lsコマンドでファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 21:22 ~masahi

システムに「masahi」という名前のホームディレクトリが存在しない場合は、通常のファイル同様に扱える。

$ ls ~masahi
~masahi
$ rm ~masahi

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm ~masa
rm: cannot remove `/home/masa': 許可がありません

「~masa」は、ユーザ「masa」のホームディレクトリを示すため、ファイル「~masa」が削除されない。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls ~masa
evolution  filesize  lfile2  mbox  proj  sfile1  work

lsコマンドでも「~masa」はホームディレクトリと解釈されて、ホームディレクトリの内容が表示される。

lsコマンドでファイルが正しく指定できた例
$ ls \~masa
~masa
$ ls '~masa'
~masa
$ ls "~masa"
~masa

シェルが「~」を解釈しないようにエスケープ文字「\」をファイル名の前につけて「\~masa」とするか、引用符で囲って「'~masa'」、二重引用符で囲って「"~masa"」と指定すると正しくファイル「~masa」が表示される。

ファイルを削除する

○ファイル「file1.txt」を削除する

rmコマンドでファイルを指定する
$ rm file1.txt

rmコマンドで削除するファイル「file1.txt」を指定すると、「file1.txt」が削除される。

削除できるファイル
自分に所有権があるファイル
所有権が同じグループのユーザであるファイル

●ディレクトリは削除できない

ディレクトリを削除しようとしても、削除できない。

$ rm dir
rm: cannot remove `dir': ディレクトリです

ディレクトリを削除する場合は、-rオプションを使う。

●ファイルに書き込み許可がない場合

ファイルに書き込み許可がない場合、削除してもよいか問い合わせてくる。

lsコマンドで削除するファイルを見る
$ ls -l
-r--r--r--    1 masa     users         206  8月 11 18:32 file21.txt

rmコマンドでファイルを指定する
$ rm file21.txt
rm: remove write-protected 通常ファイル `file21.txt'? y

削除してもよい場合は「y」[Return]を入力、削除しない場合は「n」[Return]を入力する。

ファイル名に「*」を含むファイルを削除する

○ファイル「***」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
合計 20
-rw-r--r--    1 masa     users         256 10月 10 17:25 *
-rw-r--r--    1 masa     users         256 10月 10 17:25 **
-rw-r--r--    1 masa     users         256 10月 10 17:25 ***
-rw-r--r--    1 masa     users         256 10月 10 17:25 ****
-rw-r--r--    1 masa     users         256 10月 10 17:25 *****

rmコマンドでファイルを指定する
$ rm '***'
または
$ rm "***"
または
$ rm \*\*\*

rmコマンドで、上のようにファイルを指定するとファイル「***」が削除される。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm *

「*」は、シェルにワイルドカードとして解釈されるので、ワイルドカード指定に該当するファイルが削除されてしまう。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls ***
ls: オプションが違います -- e
詳しくは `ls --help' を実行して下さい.
$ ls \***
*  **  ***  ****  *****

lsコマンドでファイルが正しく指定できた例
$ ls \*\*\*
***
$ ls '***'
***
$ ls "***"
***

シェルが「*」を解釈しないようにエスケープ文字「\」をすべての「*」の前に入れて「\*\*\*」とするか、引用符で囲って「'***'」、二重引用符で囲って「"***"」と指定すると正しくファイル「***」が表示される。

ファイル名に「'」を含むファイルを削除する

○ファイル「''」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 22:42 ''

rmコマンドでファイルを指定する
$ rm \'\'
または
$ rm "''"

rmコマンドで、削除するファイルのファイル名を1文字ずつエスケープ記号「\」でエスケープすると、ファイル「''」が削除される。エスケープ記号を使う代わりに、ファイル名を2重引用符「"」で囲ってもよい。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm ''
rm: cannot lstat `': そのようなファイルやディレクトリはありません

これは、シェルが「'」と「'」に囲まれた文字数0のファイル名をrmコマンドに渡したためにこのようなエラーとなる。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls ''
ls: : そのようなファイルやディレクトリはありません
$ ls ''''
ls: : そのようなファイルやディレクトリはありません
これは、シェルが「'」と「'」に囲まれた文字数0のファイル名をrmコマンドに渡したためにこのようなエラーとなる。 lsコマンドでファイルが正しく指定できた例
$ ls \'\'
''
$ ls "''"
''

シェルが「'」を解釈しないようにエスケープ文字「\」をすべての「'」の前に入れて「\'\'」とするか、二重引用符で囲って「"''"」と指定すると正しくファイル「''」が表示される。

複数のファイルを一度に削除する

○複数のファイル「file1.txt」「file2.txt」「file3.txt」を一度に削除する

rmコマンドでファイルを複数指定する
$ rm file1.txt file2.txt file3.txt

rmコマンドに続いて、削除したいファイルを複数指定すると、1度にそれらのファイルを削除することができる。ただし、これらのファイル名を正確に入力しなくてはならない。

ファイル名にスペースを含むファイルを削除する

○ファイル「file 1.txt」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256  6月 12 18:36 file 1.txt

rmコマンドでファイルを指定する
$ rm 'file 1.txt'
または
$ rm "file 1.txt"

rmコマンドで、削除するファイルを引用符「'」で囲って「'file 1.txt'」指定すると、「file 1.txt」が削除される。引用符の代わりに2重引用符「"」で囲ってもよい。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm file 1.txt
rm: cannot remove `file': そのようなファイルやディレクトリはありません
rm: cannot remove `1.txt': そのようなファイルやディレクトリはありません

普通に「file 1.txt」を削除しようとすると、シェルがrmコマンドに「file」と「1.txt」の2つの文字列を別々に渡す。そのため、上のようにrmコマンドが2つのファイルと解釈してエラーメッセージを出す。ファイル名を引用符「'」または2重引用符「"」で囲うことにより、シェルが1つの文字列としてrmコマンドに文字列を渡して削除できる。

ファイル名に「\」を含むファイルを削除する

○ファイル「\」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 15:02 \

rmコマンドでファイルを指定する
$ rm '\'
または
$ rm \\

rmコマンドで、削除するファイルを引用符「'」で囲って「'\'」指定すると、ファイル「\」が削除される。エスケープ文字「\」を使ってファイル名を「\\」と指定しても削除できる。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm \
>

「\」記号を入力して[Return]を押すと、シェルは行が続くと解釈して入力するためのプロンプト「>」を表示する。そのため、ファイル「\」を指定することができない。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls \
>
$ ls "\"
>

「\」記号を入力して[Return]を押すと、シェルは行が続くと解釈して入力するためのプロンプト「>」を表示する。そのため、ファイル「\」を指定することができない。

lsコマンドでファイルが正しく指定できた例
$ ls '\'
\
$ ls \\
\

シェルが「\」を解釈しないように引用符で囲ってファイル名を「'\'」とするか、エスケープ文字「\」をファイル名の前に入れて「\\」と指定すると正しくファイル「\」が表示される。

ファイル名に「#」を含むファイルを削除する

○ファイル「#file#」を削除する

lsコマンドで削除するファイルを見る
$ ls -l
-rw-r--r--    1 masa     users         256 10月 10 12:57 #file#

rmコマンドでファイルを指定する
$ rm '#file#'
または
$ rm "#file#"
または
$ rm \#file#

rmコマンドで、上のようにファイルを指定するとファイル「#file#」が削除される。

●普通にファイルを削除しようとすると

rmコマンドで単純にファイルを指定する
$ rm #file#
rm: 引数が足りません

普通に「#file#」を削除しようとすると、「引数が足りません」というエラーメッセージが出る。これは、シェルが「#」をコメントと解釈してrmコマンドにファイル名「#file#」を渡さないため、上のようなエラーメッセージになる。

○lsコマンドで削除ファイルの指定方法を確認する

意図しないファイルを誤って削除しないために、削除するファイルをlsコマンドで直接指定して、目的のファイルだけが表示されるかを確認する。

lsコマンドでファイルが正しく指定できない例
$ ls #file#
#file#  *  **  ***  ****  *****  -file  \  ~masah

シェルが「#」をコメントと解釈するため、単純なlsコマンドが実行されてすべてのファイルが表示される。

lsコマンドでファイルが正しく指定できた例
$ ls \#file#
#file#
$ ls '#file#'
#file#
$ ls "#file#"
#file#

シェルに「#」をコメントと解釈させないために、ファイル名の前にエスケープ文字「\」を付けて「\#file#」とするか、ファイル名を引用符「'」で囲って「'#file#'」、また二重引用符で囲って「"#file#"」と指定すると正しくファイル「#file#」が表示される。