ディレクトリ中の複数のファイルを一気に移動させたい場面に遭遇したのでまとめてみました。
- ある規則に沿ってまとめる
- 数で区切ってまとめる
の方法があります。(私は2の方がやりたかった、、)
1. ある規則(ファイルのフォーマットなど)に沿って分ける
ワイルドカードを使用します。
例えばcsvファイルだけ別のディレクトリに移したい場合、以下のようにできます。
main.sh
mkdir /path/to/subdir/
mv /path/to/supdir/*.csv /path/to/subdir/
これ以外でも頭文字などで絞ってまとめることもできます。
2. 数で区切って分ける
単純にディレクトリ内のファイル数を減らしたい時は、for文と
ls -1
を使います(エルでなく、いち。ファイル名だけ一行ずつ表示してくれる)。
main.sh
for file in `ls -1 | head -n 120`
do
mv $file /path/to/subdir/.
done
これで120個まとめて動かすことができました。
ls のなかでワイルドカードを使えばファイルフォーマットなどを指定することができます(例えば中にあるディレクトリは動かしたくない場合など)。ただlsで表示されるパス名が思い通りにならないことがあるので、各ファイルがあるディレクトリで操作してください。(上手い方法があれば教えてください)