Shell
如何在 shell/perl 條件下將文件移動到新創建的目錄
這是一團亂糟糟的音樂文件和目錄。
需要同時對多個目錄執行以下操作:
- 如果目錄包含“.jpg”文件,則創建一個新目錄“Covers”並將這些文件移動到其中。
- 如果該目錄不包含任何“.jpg”文件,則不要創建“Covers”目錄
- 如果目錄已經包含“Covers”目錄,則不要創建“Covers”目錄
在
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
我還是個菜鳥,但這是我的:
#!/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
只需進入主音樂目錄並執行此腳本。
無需傳遞任何參數
編輯:以前很草率。現在更馬虎了。但我認為它會起作用。