【问题标题】:Find and move files based on filenames in txt file oneline在线根据txt文件中的文件名查找和移动文件
【发布时间】:2018-08-14 13:49:08
【问题描述】:

我确定我有一个可以工作的 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/

我当前(无法正常工作)的单线:

while read -r FILE; do find . -name "$FILE*.fastq.gz" -type f -exec cp {} /foo/movehere/ \;;done </foo/movehere/sample.txt

oneliner 中有一些错误。它仍然不起作用。

【问题讨论】:

    标签: linux shell terminal find


    【解决方案1】:

    您可以在代码中使用eval

    SEARCH="-name '$FILE*.fastq.gz'"
    eval "find . $SEARCH -type f exec cp '{}' /foo/movehere/ \";
    

    安全说明:不要将用户提供的数据放入 eval 中。

    【讨论】:

      【解决方案2】:

      不确定我是否应该删除帖子 - 但如果其他人遇到完全相同的问题,我会在此处留下我的解决方案。

      仍然不是 100% 确定我理解它失败的原因,但我通过将所有示例名称从 txt 复制到没有后缀的未经编辑的文件中,使 oneliner 正常工作。

      我猜 txt 文件中的一些(隐藏的)“\r”编辑弄乱了“$FILE”,因此它搜索了类似这样的内容:

      151617*fastq.gz\r
      

      也许对终端脚本有更好理解的人可以证实这一点。

      编辑 190128:发生在我的旧问题中,以防万一有人遇到类似问题,请确保您有 UNIX 或类似的换行,我的 txt 文件有奇怪的窗口换行。

      【讨论】:

        猜你喜欢
        • 2015-10-09
        • 1970-01-01
        • 2013-11-20
        • 2016-09-26
        • 1970-01-01
        • 1970-01-01
        • 2016-03-29
        • 1970-01-01
        相关资源
        最近更新 更多