我想按国家/地区组织约 2000 个子文件夹

我想按国家/地区组织约 2000 个子文件夹

我有一个文件夹,里面有很多子文件夹,以他的国家名称开头,采用 ISO Alpha-2(美国、英国等),我制作了一个基本的 bash 脚本

#!/bin/bash
echo Folder name:
read country 
mkdir $country 
echo Prefix of folders:
read folder
mv $folder* $country
echo done

但一个接一个地组织起来相当累人,我正在寻找一种自动完成此操作的方法,我想我需要一个完整的国家列表,但我不知道具体如何去做。

答案1

您可以使用该find命令循环遍历所有子文件夹:

find . -type d -exec ./myscript.sh {} \;

这会将每个文件夹路径的名称作为变量传递$1给脚本。您可以使用sed命令从中提取路径的相关部分$1,例如

#!/bin/sh

country=$( echo $1 | sed -e 's/[^\/]*\/\(..\).*/\1/' )
remainder=$( echo $1 | sed -e 's/[^\/]*\/..\(.*\)/\1/' )

# There must be a remainder.
echo $remainder | grep '.' > /dev/null || exit
# Ignore subdirectories.
echo $remainder | grep '\/' > /dev/null && exit

echo "$1 => $country/$remainder"
mkdir -p $country
mv $1 $country/$remainder

答案2

运行此试运行

for d in */
do
    echo mkdir -p "${d:0:2}" && echo mv -n -- "$d" "${d:0:2}"
done

然后,当对输出满意时, 去除 echo命令并再次运行它来完成实际工作。

相关内容