Shell

如何在 shell/perl 條件下將文件移動到新創建的目錄

  • March 6, 2012

這是一團亂糟糟的音樂文件和目錄。

需要同時對多個目錄執行以下操作:

  1. 如果目錄包含“.jpg”文件,則創建一個新目錄“Covers”並將這些文件移動到其中。
  2. 如果該目錄不包含任何“.jpg”文件,則不要創建“Covers”目錄
  3. 如果目錄已經包含“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  

只需進入主音樂目錄並執行此腳本。

無需傳遞任何參數

編輯:以前很草率。現在更馬虎了。但我認為它會起作用。

引用自:https://unix.stackexchange.com/questions/33309