我想将文件从多个子目录复制到主目录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
答案 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/