【问题标题】:Add name of each directory to files inside the corresponding directory in linux在linux中对应目录内的文件中添加每个目录的名称
【发布时间】:2019-02-06 04:12:57
【问题描述】:

我有一个包含多个目录的目录。这是目录列表的示例:

  • dir1_out
  • dir2_out
  • dir3_out
  • dir4_out

每个目录包含多个文件。 例如 folder1_out 包含以下文件:

  • 文件1
  • 文件2
  • 文件3

以同样的方式,其他目录包含多个文件夹。 我想将每个目录的名称添加到相应目录中的文件名中。 我想在第一个目录(dir1_out)中有以下结果:

  dir1.file1
  dir1.file2
  dir1.file3

由于我有大约 50 个目录,我想编写一个循环,获取每个目录的名称并将名称添加到所有子文件的开头。

您知道如何在 linux 中做到这一点。

【问题讨论】:

  • 您的目录和文件名中的最大字符数是多少?一般来说,这是可行的,但如果名称很长,在某些文件系统上,您可能会超出路径限制(通常最多 255 个字符)。
  • 目录和文件名的最大字符数分别为 45 和 20。
  • 那么点击 MAXPATHLEN 没问题。

标签: linux loops directory file-rename batch-rename


【解决方案1】:

如果文件不多的话,一个简单的 bash onliner 是:

for p in */*; do [ -f "$p" ] && mv -i "$p" "${p%/*}/${p/\//.}"; done

在检查我们是否正在尝试重命名实际文件后,这使用参数扩展来生成新文件名 - 请参阅 ${parameter%word}${parameter/pattern/string} 的 bash 手册页描述

如果文件过多,无法安全地将它们全部展开为一个列表:

#!/bin/bash
find . -maxdepth 2 -print |\
while read p; do
    p="${p#./}"
    mv -i "$p" "${p%/*}/${p/\//.}"
done

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2020-11-10
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2012-01-27
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多