gpt4 book ai didi

linux - 我如何将多个目录展平并叠加到一个目录中?

转载 作者:太空狗 更新时间:2023-10-29 12:35:08 26 4
gpt4 key购买 nike

我想获取一个目录层次结构列表并将它们展平到一个目录中。列表后面的任何重复文件将替换较早的文件。例如……

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/

如果您需要移动文件,那么您可以简单地用 mvcp 替换打印步骤,如下所示:

for entry in ${!directory[@]}; do
mv "${directory[$entry]}/$entry" "your_dir_path/$entry"
done

关于linux - 我如何将多个目录展平并叠加到一个目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com