【问题标题】:Copy files from multiple folders with including folder name in Linux从多个文件夹中复制文件,包括 Linux 中的文件夹名称
【发布时间】:2017-06-17 18:07:48
【问题描述】:

我有多个子文件夹,例如:

ls ./
F1 F2 F5 F8 F12 ...

每个文件夹都包含文件“file.txt”

如何将所有 file.txt 文件复制到包含文件夹名称的主文件夹?

cp ./F1/file.txt ./file_1.txt
cp ./F2/file.txt ./file_2.txt
...

【问题讨论】:

    标签: linux file directory cp file-manipulation


    【解决方案1】:

    file.txt文件从当前目录内的每个文件夹复制到当前目录,并将文件夹名称中包含的数字附加到复制文件的名称。

    for i in *; do a=$(<<< "$i" grep -o "[0-9]*" -); cp "$i/file.txt" "file_$a.txt"; done
    

    虽然不是最稳健的方法。

    【讨论】:

      【解决方案2】:

      Perl One Liner

      先到主文件夹比:

      find . | perl -a -F/ -lne 'qx(cp -r "$F[1]" T/ )'

      注意
      如果会,请不要担心屏幕上的日志文件!
      T/
      是您的目标目录
      主文件夹
      您的所有文件都存在的地方。例如,如果您的所有文件都在文件夹 Music 中;所以cd Music 那么Perl One Liner

      【讨论】:

        【解决方案3】:
        declare -a dirs
        i=1
        for d in */
        do
            dirs[i++]="${d%/}"
        done
        echo "There are ${#dirs[@]} dirs in the current path"
        
        for((i=1;i<=${#dirs[@]};i++))
        do
            echo "Copying file.txt from ${dirs[i]} dir..."
            cp ./${dirs[i]}/file.txt ./file_$i.txt
        done
        

        将其保存为脚本文件,例如fileTxtCopy.sh。然后将其放在父目录并赋予其可执行权限sudo chmod +x fileTxtCopy.sh

        将其作为脚本运行,您应该将所有 file.txt 文件复制到父目录中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-26
          • 2017-07-05
          • 2019-07-22
          • 1970-01-01
          • 2019-03-28
          • 1970-01-01
          • 2022-01-22
          • 2014-03-05
          相关资源
          最近更新 更多