批处理文件复制到另一个文件夹,并覆盖共享部分名称的文件

时间:2018-12-11 03:58:29

标签: bash

有两个文件夹,文件夹A包含一批日志文件,例如

Test10771_20181210141431.log
Test10771_20181210141431_141714370.jpg            
Test2062_20181210135223.log  
Test2118_20181210134852.log  

还有另一个文件夹B,其中包含另一个日志文件列表

Test10771_20181110142431.log
Test10771_20181110142431_141714370.jpg            
Test2062_20181010132223.log  
Test2118_20181010132852.log
Test3667_20181210142612.log 
Test8461_20181210134434.log

我想将文件从文件夹A复制到文件夹B,如果文件夹B中存在Test10771,请删除文件夹B中的Test10771_20181110142431.logTest10771_20181210141431_141714370.jpg,然后复制Test10771_20181210141431.log在文件夹A到B中。

它应该以bash进行,任何人都可以帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

怎么样:

#!/bin/bash

folder_a="./FolderA"
folder_b="./FolderB"

while read -r line; do
    rm -f -- "$folder_b"/${line}*
    cp -p -- "$folder_a"/${line}* "$folder_b"
done < <(for i in "$folder_a"/*; do
    if [ -f "$i" ]; then
        filename="${i##*/}"
        prefix="${filename%%_*}"
        echo "$prefix"
    fi
done | sort | uniq)

执行后:

$ ls -1 FolderA
Test10771_20181210141431.log
Test10771_20181210141431_141714370.jpg
Test2062_20181210135223.log
Test2118_20181210134852.log

$ls -1 FolderB
Test10771_20181210141431.log
Test10771_20181210141431_141714370.jpg
Test2062_20181210135223.log
Test2118_20181210134852.log
Test3667_20181210142612.log
Test8461_20181210134434.log
  • 该过程分为两个步骤。
  • 第一步(对于i ..循环),在FolderA中提取文件名的前缀,然后对其进行统一化。
  • 在第二步(..循环时)中,删除FolderB中与前缀匹配的文件,然后将FolderA中的文件复制到FolderB。
相关问题