指定されたディレクトリを見つけてキーワード(「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