我想创建一个脚本,它在指定的目录中查找,接受关键字(即“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
or ./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