我有一个文件夹,里面有很多子文件夹,以他的国家名称开头,采用 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
命令并再次运行它来完成实际工作。