Linux

【Linux】特定のファイル以外を指定して削除する方法

普段からLinux(特にCentOS)を使って作業することが多いのですが、linuxのコマンドを知っているか否かでは作業効率が全然違います。

これは便利だな!と思ったコマンドは、忘れないうちにメモしていくようにしたいと思います。

今回は自分がよく使うファイルの削除に関するコマンドをご紹介します。

通常のファイル削除

以下のディレクトリの状態を例に説明します。

$ ls -l /home/user/sample

-rw-r--r-- 1 user Domain Users 160 8月  16 19:07 sample01.tsv
-rw-r--r-- 1 user Domain Users 160 8月  16 19:07 sample02.tsv
-rw-r--r-- 1 user Domain Users 160 8月  16 19:08 sample03.tsv
-rw-r--r-- 1 user Domain Users 160 8月  16 19:08 sample04.tsv

ファイルの削除には「rm」コマンドを使います。

$ rm /home/user/sample/sample01.tsv
$ ls -l /home/uer/sample/
-rw-r--r-- 1 user Domain Users 160 8月  16 19:07 sample02.tsv
-rw-r--r-- 1 user Domain Users 160 8月  16 19:08 sample03.tsv
-rw-r--r-- 1 user Domain Users 160 8月  16 19:08 sample04.tsv

特定ファイル以外をすべて削除

ファイルを1つ1つ削除するなら上記の方法でいいのですが、特定のファイルは残したかったり、削除するファイル数が多かったりすると、途端に作業が面倒になります。

そんな時、特定のファイルを除きそれ以外のファイルを削除する方法があります。

# sample01.tsv以外のファイルを削除する例
$ ls /home/user/sample |  grep -v -E 'sample01.tsv' | xargs rm -rf 
$ ls -l /home/user/sample

-rw-r--r-- 1 user Domain Users 160 8月  16 19:07 sample01.tsv

linuxのコマンドは「|」で繋げることができます。

「ls」コマンドで対象ディレクトリのフォルダ一覧を抽出した上で、「grep」コマンドの「-v」オプションを使って対象のファイルを除外し、残りのファイルをすべて削除する、という流れになります。

 

ただ、上記のコマンドではファイルを削除する際、実施に対象ディレクトリ直下に移動して行わないとうまくファイルを削除することができません。

なぜなら、「ls」コマンドで抽出されるファイル一覧がフルパスではなく、ファイル名のみだからです。

$ ls /home/user/sample

sample01.tsv  sample02.tsv  sample03.tsv  sample04.tsv

どのディレクトリにいても、対象のディレクトリを指定してファイルを削除する場合は以下のコマンドで対応しましょう。

$ find /home/user/sample -type f | grep -v -E 'sample01.tsv' | xargs rm -rf 
$ ls -l /home/user/sample

-rw-r--r-- 1 user Domain Users 160 8月 16 19:07 sample01.tsv

また、除外するファイルを増やしたい場合は、grepの条件に”|”でファイル名を繋げば可能です。

$ find /home/user/sample -type f | grep -v -E 'sample01.ts|sample03.tsv' | xargs rm -rf 
$ ls -l /home/user/sample

-rw-r--r-- 1 user Domain Users 160 8月 16 19:07 sample01.tsv 
-rw-r--r-- 1 user Domain Users 160 8月 16 19:08 sample03.tsv

以上です。

-Linux