如何使用 bash 脚本来构建目录结构?
How to use the bash script for directory structure?
简介:
我正在尝试在 mac Automator screenshot 上使用 Automator 创建目录结构
并使用这个 bash 脚本
mkdir -p "//Client_Name_Social_Media/01_January_2020/Design/Deliverables"
问题:
我需要在每个目录名称前添加 Client_name。我有很多客户,我不想浪费时间重命名目录。
最终目录结构:
- Client_Name
- Client_Name_Social_Media
- Client_Name_月
- Client_Name_日历
- Client_Name_设计
- Client_Name_OpenFiles
- Client_Name_可交付成果
- Client_Name_活动
提前致谢
您可以将客户端名称存储在一个数组中,然后循环遍历它们以创建目录。在您的示例中,要使用客户端名称 Client1
、SomeClient2
、C3
创建最多 Client_Name_Month
的目录,您可以使用:
for clname in {"Client1", "SomeClient2", "C3"}
do
mkdir -p "${cln}/${cln}_Social_Media/${cln}_Month"
done
这将创建目录:
Client1/Client1_Social_Media/Client1_Month
SomeClient2/SomeClient2_Social_Media/SomeClient2_Month
C3/C3_Social_Media/C3_Month
类似于从头开始为存储在 clnames
中的新客户列表创建目录@GoodDeeds 回答适当的 cli bash
答案将是:
clnames=("Client1" "SomeClient2" "C3")
for cln in "${clnames[@]}"; do
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Calendars"
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Design/${cln}_OpenFiles"
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Design/${cln}_Deliverables"
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Campaigns"
done
注意:这不能直接在您编写的自动化程序脚本中运行。
如果您需要将名为 ClientName
的现有客户的目录结构递归重命名为 JohnSmith
,它可能看起来像这样
find . -depth -name 'ClientName_*' -execdir bash -c 'mv "[=11=]" "${0//ClientName_/JohnSmith_}"' {} \;
所以这解决了我的问题:
DIR=""
CLIENT=""
TMONTH="$(date -j +%d_%B_%Y)"
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Social_Media/${CLIENT}_${TMONTH}/${CLIENT}_Calendars
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Social_Media/${CLIENT}_${TMONTH}/${CLIENT}_Design/${CLIENT}_OpenFiles
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Social_Media/${CLIENT}_${TMONTH}/${CLIENT}_Design/${CLIENT}_Deliverables
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Campaigns
简介: 我正在尝试在 mac Automator screenshot 上使用 Automator 创建目录结构 并使用这个 bash 脚本
mkdir -p "//Client_Name_Social_Media/01_January_2020/Design/Deliverables"
问题: 我需要在每个目录名称前添加 Client_name。我有很多客户,我不想浪费时间重命名目录。
最终目录结构:
- Client_Name
- Client_Name_Social_Media
- Client_Name_月
- Client_Name_日历
- Client_Name_设计
- Client_Name_OpenFiles
- Client_Name_可交付成果
- Client_Name_活动
- Client_Name_月
- Client_Name_Social_Media
提前致谢
您可以将客户端名称存储在一个数组中,然后循环遍历它们以创建目录。在您的示例中,要使用客户端名称 Client1
、SomeClient2
、C3
创建最多 Client_Name_Month
的目录,您可以使用:
for clname in {"Client1", "SomeClient2", "C3"}
do
mkdir -p "${cln}/${cln}_Social_Media/${cln}_Month"
done
这将创建目录:
Client1/Client1_Social_Media/Client1_Month
SomeClient2/SomeClient2_Social_Media/SomeClient2_Month
C3/C3_Social_Media/C3_Month
类似于从头开始为存储在 clnames
中的新客户列表创建目录@GoodDeeds 回答适当的 cli bash
答案将是:
clnames=("Client1" "SomeClient2" "C3")
for cln in "${clnames[@]}"; do
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Calendars"
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Design/${cln}_OpenFiles"
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Design/${cln}_Deliverables"
mkdir -p "./${cln}/${cln}_Social_Media/${cln}_Month/${cln}_Campaigns"
done
注意:这不能直接在您编写的自动化程序脚本中运行。
如果您需要将名为 ClientName
的现有客户的目录结构递归重命名为 JohnSmith
,它可能看起来像这样
find . -depth -name 'ClientName_*' -execdir bash -c 'mv "[=11=]" "${0//ClientName_/JohnSmith_}"' {} \;
所以这解决了我的问题:
DIR=""
CLIENT=""
TMONTH="$(date -j +%d_%B_%Y)"
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Social_Media/${CLIENT}_${TMONTH}/${CLIENT}_Calendars
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Social_Media/${CLIENT}_${TMONTH}/${CLIENT}_Design/${CLIENT}_OpenFiles
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Social_Media/${CLIENT}_${TMONTH}/${CLIENT}_Design/${CLIENT}_Deliverables
mkdir -p ${DIR}/${CLIENT}/${CLIENT}_Campaigns