伙计们,我有一个小脚本,用于创建一个带有n个子文件夹的父文件夹。
我基于命令mkdir -p parentFolder/{"Folder 1", "Folder 2",...}
。
通过像上面这样写出来运行它,将创建以下文件夹结构:
parentFolder
|-Folder 1
|-Folder 2
|-Folder 3
#!/bin/bash
#Takes two arguments for the name of your parent folder
#and how many subfolders you want
function createFolderAndSubfolders {
folderName="$1"
numberOfSubfolders="$2"
subFolderName="subFolder"
buildString="$folderName/{"
for (( i=1; i<=$numberOfSubfolders; i++ ))
do
if [[ $i -ne $numberOfSubfolders ]]; then
buildString+="\"$subFolderName $i\","
else
# If last number in loop, don't add comma
buildString+="\"$subFolderName $i\""
fi
done
buildString+="}"
#This should make an example string like: 'parentFolder/{"subFolder 1","subFolder 2"}'
#Create parent and sub folders
mkdir -p "$buildString"
}
当我使用此字符串串联运行它时,我得到的是父文件夹,但只有一个子文件夹,而不是手动键入时所发生的事情。
parentFolder
|-{"subFolder 1","subFolder 2"}
我还尝试过使用单引号将双引号转义以达到相同的效果。
我是否遗漏了任何可能阻止其正常工作的内容?
[mkdir -p "$buildString"
为命令提供了一个很长的参数,并且像{
这样的所有运算符都被转义并视为字符。
您应该直接为每个文件夹直接调用mkdir吗?即
for (( i=1; i<=$numberOfSubfolders; i++ ))
do
mkdir -p "$subFolderName $i"
done
即使您的方法可以使用,也会使您容易遇到问题,例如subFolderName
中有双引号吗,例如:./myscript.sh "folder \" name" 10
如果您真的想建立一个列表,请不要使用{}
运算符,因为bash只是将其用作mkdir的额外参数。
即:
buildString=""
for (( i=1; i<=$numberOfSubfolders; i++ ))
do
buildString+=" \"$subFolderName $i\""
done
mkdir -p $buildString
最后,bash通配符表达式已经支持您要执行的操作。
mkdir New\ Folder\ {0..10}