2000個のPDFをそれぞれ100個のファイルを含む複数のフォルダに移動します。

2000個のPDFをそれぞれ100個のファイルを含む複数のフォルダに移動します。

Macには2000個のPDFファイルを含むフォルダがあります。コマンドラインを使用して、100個のPDFごとに同じディレクトリに作成される別のフォルダに移動したいと思います。これにより、私のホームディレクトリにそれぞれ100個のPDFを含む20個のフォルダ(1、2などの名前)があります。どうすればいいですか?

答え1

カウンタを増やしてディレクトリを作成しながら(位置パラメータ範囲)、set100個のファイルをバッチ処理できます。"${@:START:COUNT}"shift 100c

set -- *.pdf
c=1
while (($#)); do
  mkdir ${c}
  if [ $# -ge 100 ]; then
    mv -- "${@:1:100}" ${c}
    c=$((c+1))
    shift 100
  else
    mv -- "${@}" ${c}
    shift $#
  fi
done

答え2

私はあなたの特定の問題について以下のbashスクリプトを書いています。これが役に立ちます。

#!/bin/bash

DEFAULT_DELIM_SIZE=100
num_of_total_file=$(ls | grep "pdf" | wc -l)
num_of_total_folder=$((num_of_total_file/DEFAULT_DELIM_SIZE))

echo "Total number of pdf files = $num_of_total_file"
echo "Total number of folder will generated if not exist $num_of_total_folder"

# create directories if not exist
for (( i = 0; i < $num_of_total_folder; i++ )); do
    if [[ ! -d $i ]]; then
        mkdir $i
    fi
done

# file name format should be like this <arbitrary_numb>-<folder_num>.pdf
for file in *.pdf; do
    prefix=$(echo $file | awk '{split($0, a, "-"); print a[2]}' | awk '{split($0, a, "."); print a[1]}')
    if [[ -d $prefix ]]; then
        mv $file $prefix
    fi
done

関連情報