尝试自动化一些工作,这包括许多文件夹生成,但我正在考虑使用动态数组来做到这一点,让我知道这听起来如何。
我的脚本的第一部分是使用以下命令导出目录列表:
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
它给出了预期的输出:
Folder With Some Long Title
Folder With Another Long Title
在这个例子中,我只给出了(2),但可能有超过 1500 个文件夹,并且我已经编写了在服务器上创建其他文件夹的命令,并根据原始文件夹名称自动命名它们,但我遇到的问题是我希望我的脚本能够索引所有文件夹并执行我的命令(大约有 8 个命令,主要是字符串操作等)。所以我正在考虑获取目录中项目的数量,然后将它们写入上面提到的文本文件,然后使用 FOR 循环运行包含我的 8 个左右命令的次数?有什么想法或更好的想法吗?我可以使用以下方法获取计数:
wc -l FolderList.txt | awk '{ print $1 }'
但我不确定如何创建或管理动态数组并将其与 for 循环一起使用以通过我的命令进行索引。
以下是一些附带的脚本,目前已注释掉一些以进行模块化测试:
#TestString="Customer Info (YEAR) [PMNAME] [OWNERNAME] [EETYPE]"
cd "/home/USER/Downloads/"
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
wc -l FolderList.txt | awk '{ print $1 }'
#CUSTINFO=${TestString/(*)*}
#YEAR=$(grep -o '(.*)' <<<"$TestString")
#RESO3=$(grep -o '\[.*\]' <<<"$TestString")
#RESO2=${RESO3//\[PMNAME\]/}
#RESO_FINAL=${RESO2//\[EETYPE\]/}
#FULL_NAME=$TITLE_FINAL$CUSTINFO$YEAR
#mv "/home/USER/Downloads/$DOWNLOAD_NAME" "/home/USER/Downloads/$FULL_NAME"
#for f in */* ;do fp=$(dirname "$f"); ext="${f##*.}" ; mv "$f" "$fp"/"$fp"."$ext" ;done
答案1
根据命令和注释,看起来您想要做的是:
for TestString in /home/USER/Downloads/*
do
#CUSTINFO=${TestString/(*)*}
#YEAR=$(grep -o '(.*)' <<<"$TestString")
#RESO3=$(grep -o '\[.*\]' <<<"$TestString")
#RESO2=${RESO3//\[PMNAME\]/}
#RESO_FINAL=${RESO2//\[EETYPE\]/}
#FULL_NAME=$TITLE_FINAL$CUSTINFO$YEAR
#mv "/home/USER/Downloads/$DOWNLOAD_NAME" "/home/USER/Downloads/$FULL_NAME"
#for f in */* ;do fp=$(dirname "$f"); ext="${f##*.}" ; mv "$f" "$fp"/"$fp"."$ext" ;done
done
外部 for 循环循环遍历文件 in /home/USER/Downloads/
(通过通配符扩展),TestString
依次设置每个文件名。