以下のようディレクトリからcccとfffを除いてコピーしたい。
1 2 3 |
$ ls aaa bbb ccc ddd eee fff $ |
findを使って除く
テスト
1 2 3 4 5 6 |
$ find . -mindepth 1 -maxdepth 1 -not -name '*ccc*' -not -name '*fff*' ./eee ./aaa ./bbb ./ddd $ |
これでcccとfffを除いた一覧が取得できる。mindepthとmaxdepthをともに1を指定して、この階層のみ出力する。
-execでコピーする準備
1 2 3 4 5 6 |
$ find . -mindepth 1 -maxdepth 1 -not -name '*ccc*' -not -name '*fff*' -exec echo cp -a -v {} /target/dir/ \; cp -a -v ./eee /target/dir/ cp -a -v ./aaa /target/dir/ cp -a -v ./bbb /target/dir/ cp -a -v ./ddd /target/dir/ $ |
-execで見つかったもファイルやディレクトリに対してコマンドを実行する。{}は見つかったファイルやディレクトリに置き換わる。\;は-execの終わりを意味する。ここではcpの前にechoをつけて実行されるコマンドを確認している。このコマンドで良ければechoを削除すれば実際に実行する。