我确定我有一个有效的oneliner,它使我可以在目录(或。)中搜索包含与txt文件中的名称匹配的名称的文件,并将其复制到新目录中。
以某种方式我无法使它正常工作-请提供任何帮助。
很抱歉,如果重复的话-我确实在这里和其他地方都在寻找答案,但是找不到解决方法。
foo / movehere / sample.txt文件:
141516
141619
我要查找和移动的文件,即:
foo/folder/folder2/141516_S2_R1.fastq.gz
foo/folder/folder2/141516_S2_R1.fastq.gz
我要将它们移到哪里:
foo/movehere/
我当前的(无效的)oneliner:
while read -r FILE; do find . -name "$FILE*.fastq.gz" -type f -exec cp {} /foo/movehere/ \;;done </foo/movehere/sample.txt
oneliner中存在一些错误。它仍然不起作用。
答案 0 :(得分:0)
您可以在代码中使用eval
SEARCH="-name '$FILE*.fastq.gz'"
eval "find . $SEARCH -type f exec cp '{}' /foo/movehere/ \";
安全说明:请勿将用户提供的数据放入评估中。
答案 1 :(得分:0)
不知道是否应该删除帖子-但如果其他人遇到完全相同的问题,我将把解决方案留在这里。
仍然不是100%知道我理解为什么会失败,但是通过将所有样本名称从txt复制到没有后缀的未经编辑的文件中,我使oneliner正常工作。
我猜txt文件中的一些(隐藏)“ \ r”编辑弄乱了“ $ FILE”,以便它搜索如下内容:
151617*fastq.gz\r
也许对终端脚本有更深入了解的人可以证实这一点。
EDIT 190128:发生在我的老问题上,以防万一有人遇到类似问题,请确保您具有UNIX或类似的换行,我的txt文件具有奇怪的窗口换行。