【问题标题】:How to rename files in subdirectories based on the name of the directory如何根据目录名称重命名子目录中的文件
【发布时间】: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


【解决方案1】:

试试下面的脚本:

#!/bin/bash
parent=/whois/v10_cctlds/full/
newfolder=/whois/csv7/

for i in `ls $parent`
do
        let num=1
        for a in `ls $parent/$i`
                do mv $parent/$i/$a $newfolder"$i"_$num.csv
                num=`expr "$num" + 1`
                done
done

【讨论】:

  • 感谢您的帮助!不幸的是,当我运行 bash 脚本时,它告诉我脚本试图创建的文件与已经存在的文件相同。
  • 这段代码有几个问题。将其粘贴到shellcheck.net 以获取详细信息。
  • 嗨,布兰登,刚刚改变了。现在试试这个
【解决方案2】:

我怀疑你想要这个,它包含我的 cmets。

#!/bin/bash
parent=/whois/v10_cctlds/full/
newfolder=/whois/csv7/
mkdir -p "$newfolder"

for folder in "$parent"/*/; do
    num=0
    foldername=$(basename "$folder")
    for file in "$folder"/*; do
        if [[ -f "$file" ]]; then
            cp -v "$file" "$newfolder/${foldername}_$((++num)).csv"
        fi
    done
done

【讨论】:

  • 这很接近,但它没有将子目录的名称合并到文件名中。
  • 在您的问题中我们可以在哪里看到该要求?
  • 嗨格伦,很抱歉我不是很清楚。假设我有一个名为 123 的子目录,我希望子目录中的文件名为 123_1.csv
  • 现在看起来好多了?
猜你喜欢
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多