【发布时间】:2018-12-07 21:25:41
【问题描述】:
我正在尝试根据子目录的名称重命名子目录中的 csv 文件,同时还添加 _1.csv。例如:filename_1.csv、filename_2.csv 为子目录中的每个文件。
我写了一个 bash 脚本,但它没有给我正确的输出。
#!/bin/bash
num=1
parent=/whois/v10_cctlds/full/
newfolder=/whois/csv7/
mkdir "$newfolder"
for folder in "$parent"/*; do
if [[ -d "$folder" ]]; then
foldername="${folder##*/}"
for file in "$parent"/"$foldername"/*; do
filename="${file##*/}"
newfilename="$(foldername $num).csv"
cp "$file" "$newfolder"/"$newfilename"
done
fi
done
【问题讨论】:
-
输入目录结构是什么样的?所需的结构是什么样的?你得到了什么结果?
-
$(foldername $num)看起来很可疑。这会尝试将foldername作为带有参数$num的命令运行。 -
您可以使用
"$parent"/*/模式保存几行——尾部斜杠将结果限制为仅目录。 -
嗨 Benjamin,输入目录结构是一个包含很多子目录的父目录。大多数子目录里面只有一个文件,但有些子目录里面有十个文件。我想要创建一个名为“csv7”的新目录,其中包含所有具有正确命名格式的 csvs 文件。例如:新文件名_1.csv。如果我从第 10 行中取出 '$num' 部分,我会得到一堆没有 _1.csv 部分的文件。
-
@brandon,您是否有一个名为
foldername的脚本或导出函数以“1”为参数?我想你想要newfilename="${filename}_$num.csv"
标签: bash directory subdirectory