【Shell】 シェル ~ ファイル・ディレクトリの扱い cp/rm/mkdir etc ~

■ コピー

cp <オプション> [コピー元] [コピー先]

オプション

オプション 意味 備考
-r ディレクトリを再帰的にコピーする --recursive(再帰的な)
-f 警告せず、上書きを行う --force(強制的にコピーする)
-p パーミッションを保持したままコピー --preserve
-P 指定したディレクトリをつけてコピー --parents

http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230734/

■ 削除

rm <オプション> [ディレクトリ]

オプション

オプション 意味 備考
-r(-R) サブディレクトリごと削除 recursive:再帰的な
-f 警告メッセージを表示しない force:強制的

ディレクトリ作成

mkdir <オプション> [ディレクトリ]

オプション

オプション 意味 備考
-p サブディレクトリごと作成 既にディレクトリが存在する場合は何もしない

■ ある条件以外のファイル/ディレクトリを削除

 * 指定したディレクトリで、ある条件以外のファイル/ディレクトリを削除
 * こんなオプションありそうだけどないので、パイプ(※)を使って実現する
 * 以下のサイトを参考になった

http://d.hatena.ne.jp/rx7/20100625/p1
http://orebibou.com/2014/10/ls%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%83%95%E3%83%AB%E3%83%91%E3%82%B9%E8%A1%A8%E7%A4%BA%E3%82%92%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

構文

ls -dF 【対象ディレクトリ】 | grep -v -E '【条件1】|【条件2】|...' | xargs rm -rf

ls -dF /usr/tomcat/logs/* | grep -v -E '*2015-04-20.log$|catalina.out' | xargs rm -rf

補足:パイプ(パーティカルバー)について

 * 前のコマンドの標準出力を後ろのコマンドの標準入力に渡す。
 * "|" で表す

 ■ ファイルの差分

diff [ファイル1] [ファイル2]

サンプル

# 修正前のファイルをバックアップとして、とっておく
cp my.cnf my.cnf.backup

# viなどでファイルを修正する
vi my.cnf

# 意図した修正かどうかを最後に差分をとって確認する
diff my.cnf my.cnf.backup

■ 文字列を検索する

grep "検索する文字列" [ファイル]

サンプル

grep "Hello" sample.txt