【问题标题】:Shell script for copying the specific file from csv to another directory with same folder hierarchy structure用于将特定文件从 csv 复制到具有相同文件夹层次结构的另一个目录的 Shell 脚本
【发布时间】:2019-09-27 04:23:51
【问题描述】:

我有一个文件列表要从 smb 服务器从 csv 复制到我的 centos7 硬盘

missing.csv

Filepath
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00001.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00002.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00003.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00004.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00005.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00006.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00007.jpg

现在我需要从 csv 列表 (i.e)filepath column 复制文件并将其粘贴到具有相同目录结构的本地驱动器中。

我尝试了以下脚本并且只能复制文件,我需要与源目录结构相同的文件。 - 我已经在我的 centos 机器上安装并挂载了 smbclient

script.sh

#!/bin/bash

while read path; do
  cp -v "$path" "$1"
done

CMD: ./script.sh /home/test1 < missing.csv

【问题讨论】:

标签: bash shell csv copy


【解决方案1】:

对于简单的情况(文件名中没有空格/特殊字符,...),可以将“--parents”(由上面的 cyrus 建议)与完整的文件列表结合使用。可能使用 xargs 来支持大量文件

cp --parents -t "$path" $(cat)
# Using xargs to allow larger number of files
xargs cp --parents -t "$path"

【讨论】:

    【解决方案2】:

    即使 missing.csv 包含空格,这也很好。

    脚本.sh

    #!/bin/bash
    dest="${1}"
    while read l
    do
        f="${dest}/${l}"
        d=$(dirname "${f}")
        mkdir -p "${d}"
        cp "${l}" "${f}"                                                            
    done
    
    $ cat missing.csv 
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00001.jpg
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00002.jpg
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00003.jpg
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00004.jpg
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00005.jpg
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00006.jpg
    ./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00007.jpg
    
    $ ./script.sh ./dest < missing.csv
    
    $ find dest -type f
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00007.jpg
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00006.jpg
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00004.jpg
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00005.jpg
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00001.jpg
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00002.jpg
    dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00003.jpg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多