根据txt文件单行中的文件名查找和移动文件

时间:2018-08-14 13:49:08

标签: linux shell terminal find

我确定我有一个有效的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中存在一些错误。它仍然不起作用。

2 个答案:

答案 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文件具有奇怪的窗口换行。