[英]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/
而且,如果您需要移動文件,則只需用mv
或cp
替換打印步驟,如下所示:
for entry in ${!directory[@]}; do
mv "${directory[$entry]}/$entry" "your_dir_path/$entry"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.