【问题标题】:(OS X Shell) Copying files based on text file containing file names without extensions(OS X Shell)基于包含不带扩展名的文件名的文本文件复制文件
【发布时间】:2016-11-12 12:15:45
【问题描述】:

前言:我不是一个 shell 脚本编写者,实际上根本不是一个 shell 脚本编写者。

我有一个文件夹 (folder/files/),其中包含数千个文件,具有不同的扩展名和随机名称。所有文件名中都没有空格。没有子文件夹。

我有一个纯文本文件 (filelist.txt),其中包含数百个文件名,所有文件名没有扩展名。所有文件名在folder/files/ 中都有对应的文件,但扩展名不同。有些可能在folder/files/ 中有多个对应的文件,但扩展名不同。

来自filelist.txt的例子:

WP_20160115_15_11_20_Pro
P1192685
100-1373
HPIM2836

例如,这些可能对应于folder/files/ 中的以下文件:

WP_20160115_15_11_20_Pro.xml
P1192685.jpeg
100-1373.php
100-1373.docx
HPIM2836.avi

(注意两个名为100-1373 的文件具有不同的扩展名。)

我正在使用 OS X (10.11) 机器。我需要做的是folder/files/ 中与filelist.txt 中的文件名匹配的所有文件复制到folder/copiedfiles/1

我已经疯狂地搜索和谷歌搜索了一段时间,我发现很多人在解释如何提取没有扩展名的文件名,查找和复制所有没有扩展名的文件,以及各种相关的问题——但我找不到任何真正帮助我弄清楚如何做到这一点的东西。如果文本文件中的文件名包含扩展名,则执行 cp ˋcat filelist.txtˋ folder/copiedfiles/ 会起作用(据我所知);但他们没有,所以没有。

最简单(最好是最快)的方法是什么?

 


1 我需要做的与this question 中的完全一样,但那是专门询问,这是一个非常不同的海居民水壶.

【问题讨论】:

    标签: batch-file macos shell file-copying


    【解决方案1】:

    应该这样做:

    while read filename
    do
      find /path/to/folder/files/ -maxdepth 1 -type f \
     -name "$filename*" -exec cp {} /path/to/folder/copiedfiles/ \;
    done</path/to/filelist.txt
    

    【讨论】:

    • 阅读了使用的各个命令后,我同意:应该。但是,出于某种原因,它没有。它运行了一秒钟左右,没有给出任何错误消息,但实际上也没有复制任何文件。如果我尝试(不熟练地)通过添加第二个 -exec ls {} \; 参数来进行调试,那也不会做任何事情,不会输出任何内容。我一定在这里遗漏了一些重要的东西,但我不知道是什么。所有文件夹路径都应该有斜杠和转义空格,对吧?
    • 对,设法让它工作。问题是文本文件有 Windows CRLF 行结尾,而不是 Unix LF 行结尾,所以 $filename.* 扩展为 100-1373\r.*,这当然不存在。切换到 LF 行结尾修复了它。
    • @JanusBahsJacquet 这确实是一个绝妙的即兴创作。
    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 2018-09-13
    • 2017-07-16
    • 2015-03-11
    • 2012-01-10
    • 2013-01-30
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多