【初心者向け】基礎&実践プログラミング

初心者がつまづきやすいところ、最短で実力が身につく方法をお伝えします。

【Linux】ファイルやフォルダを小分けにする方法

f:id:AIProgrammer:20200617192402p:plain

目的

並列でプログラムを実行したい場合、データセットを小分けにしたい場合がある。小分けにする数が多いほど手間がかかる。
そこで、以下を目的とする。

  • シェルスクリプトを使ってデータセット(ファイルやフォルダ)を小分けにする

フォルダ構造

フォルダ内にテキストファイルが100個あります。

.
├── 001.txt
├── 002.txt
├── 003.txt
       ...
└── 100.txt

ソースコード

ソースコードは、以下の通りです。folder_nでいくつのフォルダに分けるかを指定してください。この例では、100個のテキストファイルを10個のフォルダ(batch??)に分けます。

時折、均等にファイルを分けきれない場合がありますがその場合は、最後に生成した「batch??」フォルダに残りのファイルを格納します。

# The number of folder and file
folder_n=10
file_n=$(($(ls|wc -l)/$folder_n))

# split files or folders
for i in $(seq -w 1 $folder_n);do
    mkdir batch${i}
    mv $(ls |grep -v batch |head -n $file_n) batch${i}
done

# move last files or folders
mv $(ls |grep -v batch) batch${folder_n}

実行結果

100個のファイルを10個のフォルダに分けることができました。

.
├── batch01
│   ├── 001.txt
│   ├── 002.txt
│   ├── 003.txt
│   ├── 004.txt
│   ├── 005.txt
│   ├── 006.txt
│   ├── 007.txt
│   ├── 008.txt
│   ├── 009.txt
│   └── 010.txt
├── batch02
├── batch03
├── batch04
├── batch05
├── batch06
├── batch07
├── batch08
├── batch09
└── batch10
    ├── 091.txt
    ├── 092.txt
    ├── 093.txt
    ├── 094.txt
    ├── 095.txt
    ├── 096.txt
    ├── 097.txt
    ├── 098.txt
    ├── 099.txt
    └── 100.txt



頑張れ!喝!!の代わりにB!ブックマークを押していただけるとただただうれしいです(^^)! ↓