これは音楽ファイルとディレクトリの束です。
同時に、複数のディレクトリで次の作業を行う必要があります。
- ディレクトリに「.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