在 linux 中相应目录内的文件中添加每个目录的名称
Add name of each directory to files inside the corresponding directory in linux
我有一个包含多个目录的目录。这是目录列表的示例:
- dir1_out
- dir2_out
- dir3_out
- dir4_out
每个目录包含多个文件。
例如 folder1_out 包含以下文件:
- 文件1
- 文件2
- 文件 3
以同样的方式,其他目录包含多个文件夹。
我想将每个目录的名称添加到相应目录中的文件名中。
我想在第一个目录(dir1_out)中得到以下结果:
dir1.file1
dir1.file2
dir1.file3
因为我有大约 50 个目录,所以我想编写一个循环来获取每个目录的名称并将该名称添加到所有子文件的开头。
你知道我如何在 linux 中做到这一点吗?
如果没有太多文件,一个简单的 bash 在线工具是:
for p in */*; do [ -f "$p" ] && mv -i "$p" "${p%/*}/${p/\//.}"; done
这使用参数扩展来生成新的文件名,在检查我们正在尝试重命名实际文件之后 - 请参阅 bash ${parameter%word}
和 ${parameter/pattern/string}
[=14= 的联机帮助页说明]
如果可能有太多文件无法安全地将它们全部展开到一个列表中:
#!/bin/bash
find . -maxdepth 2 -print |\
while read p; do
p="${p#./}"
mv -i "$p" "${p%/*}/${p/\//.}"
done
我有一个包含多个目录的目录。这是目录列表的示例:
- dir1_out
- dir2_out
- dir3_out
- dir4_out
每个目录包含多个文件。 例如 folder1_out 包含以下文件:
- 文件1
- 文件2
- 文件 3
以同样的方式,其他目录包含多个文件夹。 我想将每个目录的名称添加到相应目录中的文件名中。 我想在第一个目录(dir1_out)中得到以下结果:
dir1.file1
dir1.file2
dir1.file3
因为我有大约 50 个目录,所以我想编写一个循环来获取每个目录的名称并将该名称添加到所有子文件的开头。
你知道我如何在 linux 中做到这一点吗?
如果没有太多文件,一个简单的 bash 在线工具是:
for p in */*; do [ -f "$p" ] && mv -i "$p" "${p%/*}/${p/\//.}"; done
这使用参数扩展来生成新的文件名,在检查我们正在尝试重命名实际文件之后 - 请参阅 bash ${parameter%word}
和 ${parameter/pattern/string}
[=14= 的联机帮助页说明]
如果可能有太多文件无法安全地将它们全部展开到一个列表中:
#!/bin/bash
find . -maxdepth 2 -print |\
while read p; do
p="${p#./}"
mv -i "$p" "${p%/*}/${p/\//.}"
done