すべてを

▼開く

閉じる▲

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

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

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~

指定したディレクトリにあるファイルを検索して削除する

○「/home/masa」にあるすべての「~」ファイルを削除する

findコマンドでディレクトリと検索オプションを指定する
$ find . -name \*~ -exec rm {} \;

findコマンドで、検索するディレクトリ「.」検索対象がファイル名であることを示す「-name」検索するファイル名「\*~」、検索結果を引数としてコマンドを実行する「-exec」、実行するコマンド「rm {}」コマンドの終了を表す「\;」を指定すると、findコマンドにより検索されたファイルが削除される。意図しないファイルを削除しないために、事前に同じ条件で検だけ実行して確認しておくとよい。

実行させるコマンド部分「rm {} \;」の意味

rm 実行するコマンド
{} findの検索結果に置き換えられる部分
\; コマンドの終了(エスケープ文字「\」と終了記号「;」)

「{}」は、findの検索結果のファイル名で置き換えられる。「\」は、シェルが「;」を解釈するのを防ぐためのエスケープ文字で、「;」までがコマンド部分である。。

○削除の許可を求めながらコマンドを実行する

一度にコマンドを実行せずに、コマンドの実行許可を逐次求めながら行うには、「-exec」の代わりに「-ok」を指定する。コマンドを実行する場合は「y」、実行せずにスキップする場合は「n」を入力する。

findコマンドでディレクトリと検索オプションを指定する
$ find . -name \*~ -ok rm {} \;
< rm ... ./work/cat/a.txt~ > ? y
< rm ... ./work/cat/b.txt~ > ? n
< rm ... ./work/cat/c.txt~ > ? y
< rm ... ./work/cat/e.txt~ > ? n
< rm ... ./work/file3.txt~ > ? n
< rm ... ./work/dir2/dir2_1/file1~ > ? n
< rm ... ./work/dir3/file3.txt~ > ? n
< rm ... ./work/cut/List3~ > ? n
< rm ... ./work/cut/hdni1.txt~ > ? n
< rm ... ./work/cut/hdni2.txt~ > ? n
< rm ... ./work/cut/hdni3.txt~ > ? n
< rm ... ./work/cut/hdni4.txt~ > ? y
< rm ... ./work/cut/hdni1-.txt~ > ? n

オプション 意 味
-name 検索対象をファイル名で指定する
-exec 検索結果を引数としてコマンドを実行する
-ok コマンド実行時に逐次実行許可を求める