【问题标题】:how to rename multiple files in a multiples directories whit the name of each directory如何使用每个目录的名称重命名多个目录中的多个文件
【发布时间】:2021-03-28 16:23:27
【问题描述】:

我在重命名文件夹中的所有文件时遇到问题,我在这里找到了一个简单的解决方案:

Rename files in multiple directories to the name of the directory

但我注意到它仅适用于该文件夹中的单个文件,如何为每个目录中包含多个文件的多个目录执行此操作

我有这个例子

test_folder/
   results_folder1/
     file_1.csv
     file_2.csv
     file_3.csv
     file_4.csv
     ...

   results_folder2/
     file_1.csv
     file_2.csv
     file_3.csv
     file_4.csv
     ...

得到这个

test_folder/
   results_folder1/
     results_folder1_1.csv
     results_folder1_2.csv
     results_folder1_3.csv
     results_folder1_4.csv
     ...

   results_folder2/
     results_folder2_1.csv
     results_folder2_2.csv
     results_folder2_3.csv
     results_folder2_4.csv
     ...

我想我可以使用重命名,但是对于这种情况怎么办, 在此先感谢大家

【问题讨论】:

  • 将链接的解决方案包装在一个循环中(例如for top in dir1 dir2 ...; do (cd "$top"; linked_solution_here); done 将其应用于每个顶级目录。如果您遇到问题,请将您的尝试添加到您的问题中。如果成功,您可以添加并接受你自己的答案。
  • 好的,我会尝试for循环,谢谢队友

标签: bash rename


【解决方案1】:

你可以遍历find的结果:

for f in $(find . -type "f" -printf "%P\n"); do
  mv $f $(dirname $f)/$(basename $(dirname $(readlink -f $f)) | tr '/' '_')_$(basename $f); 
done

说明:递归查找所有常规文件,从当前目录开始,并打印不带前导. 的相对路径(每行一个),并将其存储在变量f 中。对于每个f,重命名为[f的目录部分]/[f的目录名称的基本名称(即f所在的父目录的名称),所有/字符替换为_]_[f的文件名药水]

使用find$(dirname $f)/$(basename $(dirname $(readlink -f $f)) 中的额外复杂性是允许多于1 级的嵌套目录。

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 2016-07-15
    • 2018-11-01
    • 2012-12-27
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多