作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想获取一个目录层次结构列表并将它们展平到一个目录中。列表后面的任何重复文件将替换较早的文件。例如……
foo/This/That.pm
bar/This/That.pm
bar/Some/Module.pm
wiff/This/That.pm
wiff/A/Thing/Here.pm
这会结束
This/That.pm # from wiff/
Some/Module.pm # from bar/
A/Thing/Here.pm # from wiff/
我有一个可能过于复杂的 Perl 程序来执行此操作。我对 SO 用户可能解决它的巧妙方法很感兴趣。最大的障碍是“在必要时创建中间目录”,可能是使用 basename 和 dirname 的某种组合。
我要解决的真正问题是检查两个已安装的 Perl 库之间的差异。我首先将每个 Perl 的多个库目录展平到一个目录中,模拟 Perl 如何搜索模块。然后我可以 diff -r
它们。
最佳答案
如果您不介意条目的最终顺序,我想这可以完成这项工作:
#!/bin/bash
declare -A directory;
while read line; do
directory["${line#*/}"]=${line%%/*}
done < $1
for entry in ${!directory[@]}; do
printf "%s\t# from %s/\n" $entry ${directory[$entry]}
done
输出:
$ ./script.sh files.txt
A/Thing/Here.pm # from wiff/
This/That.pm # from wiff/
Some/Module.pm # from bar/
如果您需要移动文件,那么您可以简单地用 mv
或 cp
替换打印步骤,如下所示:
for entry in ${!directory[@]}; do
mv "${directory[$entry]}/$entry" "your_dir_path/$entry"
done
关于linux - 我如何将多个目录展平并叠加到一个目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616769/
我是一名优秀的程序员,十分优秀!