이것은 음악 파일과 디렉토리의 묶음입니다.
동시에 여러 디렉터리에서 다음 작업을 수행해야 합니다.
- 디렉터리에 ".jpg" 파일이 포함된 경우 새 디렉터리 "Covers"를 만들고 파일을 해당 디렉터리로 이동합니다.
- 디렉토리에 ".jpg" 파일이 포함되어 있지 않으면 "Covers" 디렉토리를 생성하지 마십시오.
- 디렉토리에 이미 "Covers" 디렉토리가 포함된 경우 "Covers" 디렉토리를 생성하지 마십시오.
답변1
존재하다 bash
:
#!/bin/bash
shopt -s nullglob
for dir; do
[[ -d $dir ]] || continue
jpgs=( "${dir}"/*.jpg )
if (( "${#jpgs[@]}" )); then
[[ -d ${dir}/Covers ]] || mkdir "${dir}/Covers"
# Avoiding race condition by not reusing the jpgs array
for jpg in "${dir}"/*.jpg; do
mv "$jpg" "${dir}/Covers"
done
fi
done
답변2
저는 아직 초보자이지만 제가 가진 것은 다음과 같습니다.
#!/bin/bash
current_directory=$(pwd)
#echo $current_directory
(find -maxdepth 1 -type d -name '*' ! -name '.*' -printf '%f\n')>filelist
number=$(find -maxdepth 1 -type d -name '*' ! -name '.*' -printf '%f\n' | wc -l)
for iteration in `seq $number`
do
fname=$(head -1 filelist)
sed 1d < filelist > filelist2
mv filelist2 filelist
cd "$fname"
if [ -z $(ls | grep -i jpg) ]
then echo "Doing nothing as there are no JPG files....."
else
total=$(ls -l|grep -i jpg | wc -l)
mkdir -p Covers
mv *.jpg Covers
echo "Moved $total JPG Files....."
fi
cd "$current_directory"
done
기본 음악 디렉토리로 이동하여 이 스크립트를 실행하세요.
매개변수를 전달할 필요가 없습니다.
편집 : 예전에는 엉성했습니다. 지금은 더욱 엉성해졌습니다. 그러나 나는 그것이 효과가 있을 것이라고 생각한다.
답변3
#!/bin/bash
SAVEIFS=$IFS
IFS="\n\b"
#-----------------------------------------------------------------------------
#work in current dir if work path was not provided
[ $# -eq 0 ] && search_path="." || search_path="$1"
# files to be moved, more extensions can be added
wildcard="*[jpg|JPG]"
move_jpg() {
# create "Covers" if it doesn't exist
[ -d "$1/Covers" ] && echo -n " ... " || { echo -n " ...create Covers "; mkdir "$1/Covers" }
mv "$1/$wildcard" "$1/Covers/$wildcard"
echo "... files moved"
}
for d in "$search_path/*/"; do
echo -n "testing <$d> "
[ -e "$d/$wildcard" ] && ${move_jpg "$d"} || echo "...Not found <$wildcard>"
done
#-----------------------------------------------------------------------------
IFS=$SAVEIFS