从文件

时间:2019-12-13 22:43:33

标签: bash copy

我想将文件从多个子目录复制到主目录copiedFiles/中的新目录。我只想复制可以与文件strs2bMatchd.csv中的字符串匹配的文件。子目录的名称也与要匹配的字符串的第一部分匹配(请参见下面的示例)。

带有子目录的主目录如下

main_dir/
strs2bMatchd.csv
    1111/
      1111_aaa1_x873.csv
      1111_aaa2_x874.csv
      1111_ddd1_x443.csv
      1111_ddd2_x444.csv
    1112/
      1112_bbb1_x912.csv
      1112_bbb2_x913.csv
      1112_fff1_x664.csv
      1112_fff2_x665.csv
    1113/
      1113_ccc1_x912.csv
      1113_ccc2_x913.csv

要复制的文件应与strs2bMatchd.csv文件中的字符串

cat strs2bMatchd.csv
1111_aaa1
1111_aaa2
1112_bbb1
1112_bbb2
1113_ccc1
1113_ccc2

这是预期的结果

main_dir/
strs2bMatchd.csv
    1111/
      1111_aaa1_x873.csv
      1111_aaa2_x874.csv
      1111_ddd1_x443.csv
      1111_ddd2_x444.csv
    1112/
      1112_bbb1_x912.csv
      1112_bbb2_x913.csv
      1112_fff1_x664.csv
      1112_fff2_x665.csv
    1113/
      1113_ccc1_x912.csv
      1113_ccc2_x913.csv
    copiedFiles/
      1111_aaa1_x873.csv
      1111_aaa2_x874.csv
      1112_bbb1_x912.csv
      1112_bbb2_x913.csv
      1113_ccc1_x912.csv
      1113_ccc2_x913.csv

1 个答案:

答案 0 :(得分:0)

或者,考虑

M=main_dir
mkdir -p $M/copiedFiles
find $M  | grep -F -v "$M/copiedFiles" | grep -Ff $M/strs2bMatch.csv  | xargs cp -t $M/copiedFiles/

它将执行一次查找。

如果文件中可能包含空格或其他特殊字符,请考虑使用安全版本(NUL终止的字符串)-查找(-print0),grep(-z -Z)xargs(-0)。

更新1:OP表示他的cp版本没有-t。没有此选项的替代解决方案已发布。

我无法测试,请尝试使用人等解决问题。

M=main_dir
mkdir -p $M/copiedFiles
find $M  | grep -F -v "$M/copiedFiles" | grep -Ff $M/strs2bMatch.csv  | xargs -I{} cp {} $M/copiedFiles/