簡體   English   中英

如何將多個目錄展平並覆蓋到一個目錄中?

[英]How would I flatten and overlay multiple directories into one directory?

我想獲取目錄層次結構的列表,並將它們展平到一個目錄中。 列表中后面的任何重復文件將替換以前的文件。 例如...

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用戶解決問題的聰明方法感興趣。 最大的障礙是“可能在必要時創建中間目錄”,或者結合使用基名和目錄名。

我要解決的真正問題是檢查兩個已安裝的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM