代码之家  ›  专栏  ›  技术社区  ›  Lorenzo OnoSendai

在Linux上的文件夹之间复制文件

  •  1
  • Lorenzo OnoSendai  · 技术社区  · 6 年前

    我必须从不同的文件夹中复制许多文件。

    1. 不知道源文件夹中有多少个
    2. 知道文件夹与包含的文件同名
    3. 只有包含某些文件扩展名的文件夹需要复制

    源文件夹结构示例

    源文件夹具有以下结构

    root
     - folder1
        - folder1.txt
     - folder2
        - folder2.csv
     - folder3
        - folder3.txt
    

    目标文件夹结构示例

    目标文件夹应如下所示结构

    root
     - folder1
        - folder1.txt
     - folder3
        - folder3.txt
    

    cp src/**/*.txt dest/
    for file in $(ls *.txt); 
       do mkdir -p source/${file%.*}/ && mv $file dest/${file%.*}/; 
    done
    

    首先,我复制目标文件夹中的所有文件。假设每个文件都在一个同名的文件夹中,那么我将移动这些文件,重新创建原始结构。这个脚本效果很好。

    现在,需求已更改为支持多级文件夹结构。例如。

    root
     - folder1
        - folder11
           - folder11.txt
     - folder2
        - folder2.csv
     - folder3
        - folder3.txt
    

    如何调整脚本以保持通用?

    1 回复  |  直到 6 年前
        1
  •  3
  •   mickp    6 年前

    这可能对您有用:

    #!/usr/bin/env bash
    
    shopt -s globstar
    
    src=some/src/path
    dest=some/dest/path
    
    for f in "$src"/**/*.txt; do
        d=${f#"$src"} d=$dest/${d%/*}
        mkdir -p -- "$d" || continue
        cp -- "$f" "$d"
    done