きっかけ
100個ぐらいのフォルダの中にそれぞれファイルがあって、それを一気に取り出して一つのフォルダに押し込みたい。unixですでに誰かがやってそうだけどヒットしない。。。
— yamah@新アカウント (@_YamaYuki) December 2, 2016
@kubor_ 先頭単語が1-9だったので、cp 1*/*.pdb foo/ を9回やってごまかしました。よい方法ありますか?
— yamah@新アカウント (@_YamaYuki) December 3, 2016
結構あります。こういう時。
解決方法
いろいろありますけど find
の -exec
オプションを使うのが簡単です。
例えば下記のような状態で、 *.pdb
を foo/
に移したいとします。
$ tree
.
├── 1_hoge
│ └── a.pdb
├── 2_hoge
│ └── b.pdb
└── foo
3 directories, 2 files
find
の結果を -exec
で mv
に渡します。
{}
に find
の結果が入ります。
コマンドの終了位置には \;
を入れてください。
$ find [1-9]*/* -exec mv {} foo \;
実行するとこうなります。
$ tree
.
├── 1_hoge
├── 2_hoge
└── foo
├── a.pdb
└── b.pdb
他のやり方
思いついたら追記するかも
ファイル名をグロブしてforループでmv
$ for i in [1-9]*/*; do mv ${i} foo; done