지정된 디렉토리를 찾고 키워드(예: "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