体系的なドラムを生成するスクリプト[閉じる]

体系的なドラムを生成するスクリプト[閉じる]

指定されたディレクトリを見つけてキーワード(「kick」、「snare」など)を許可し、関連するすべての.wavファイルを別のディレクトリにコピーするスクリプトを作成したいと思います。

次に、.wavファイルをサブディレクトリにグループ化し、各サブディレクトリに数字に関係なく128個の.wavファイルが含まれるようにします。

私が検索しているフォルダは/Users/bot/Documents/_Sound\Libraryです。

これまで私が思いついたこと:

/Users/bot/Documents/_Sound\ Library -iname 'kick?.wav'を探す

入れましたか? 「kickz」または「kicks」と呼ばれるフォルダの場合

答え1

私はあなたが望むことをできるようにしたい速いbashスクリプトを書いた。ファイルとして保存sort.shした後./sort.sh kick、または(ファイルスペースクエリ)のように./sort.sh snare実行します。渡した値に基づいてファイルを見つけて、番号付きのディレクトリkick_1などを作成します。kick_2また、必要に応じて、各ディレクトリにすべてのファイル名を含むインデックスファイルを残します。

#!/bin/bash

declare -i numFiles
declare -i numDirs
mkdir ./temp

## Find files and copy to ./temp directory
find -E  /Users/bot/Documents/_Sound\ Library -regex ".*($1).*" -exec cp {} ./temp/ \;

## Get total number of files found and divide by 128 (+1 to allow for the final directory)
numFiles=`ls ./temp | wc -l`
numDirs=$numFiles/128+1

## All the file moving and directory naming
for i in $(seq 1 $numDirs); do
        mkdir $1_$i;
        ls ./temp/ |head -128 > $1_$i/$1_$i.index
                for x in `cat $1_$i/$1_$i.index`; do mv ./temp/$x $1_$i; done

        ## Uncomment if you want to remove the index file
        #rm $1_$i/$1_$i.index
done

## Remove temp directory
rm -rf ./temp

関連情報