5

我有大量文件,我试图按字母顺序将它们组织成三个文件夹。我正在尝试将一个 bash 脚本放在一起,该脚本能够获取文件的第一个字母,然后根据该第一个字母将其移动到文件夹中。

例如:

文件 -> 文件夹名称

苹果-> AG

香蕉 -> AG

番茄 -> HT

斑马-> UZ

任何提示将不胜感激!蒂亚!

4

3 回答 3

6
#!/bin/bash
dirs=(A-G H-T U-Z)
shopt -s nocasematch

for file in *
do
    for dir in "${dirs[@]}"
    do
        if [[ $file =~ ^[$dir] ]]
        then
            mv "$file" "$dir"
            break
        fi
    done
done
于 2012-05-22T00:27:34.160 回答
2

您需要子字符串扩展case 语句。例如:

thing=apples
case ${thing:0:1} in
    [a-gA-G]) echo "Do something with ${thing}." ;;
esac
于 2012-05-22T00:27:04.567 回答
0

添加我的代码 - 这是基于 Dennis Williamson 的 99% - 我刚刚添加了一个 if 块以确保您没有将目录移动到目标目录中,并且我希望每个字母都有一个目录。

#!/bin/bash
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
shopt -s nocasematch

for file in *
do
    for dir in "${dirs[@]}"
    do

     if [ -d "$file" ]; then
      echo 'this is a dir, skipping'
      break
     else
      if [[ $file =~ ^[$dir] ]]; then
       echo "----> $file moves into -> $dir <----"
       mv "$file" "$dir"
       break
      fi
     fi
  done
done
于 2016-04-09T14:39:15.733 回答