Batch file (OS X Shell)基于包含不带扩展名的文件名的文本文件复制文件

Batch file (OS X Shell)基于包含不带扩展名的文件名的文本文件复制文件,batch-file,macos,shell,file-copying,Batch File,Macos,Shell,File Copying,前言:我不是一个很好的shell脚本编写者,事实上我根本不是一个shell脚本编写者 我有一个文件夹(folder/files/),里面有数千个文件,扩展名和随机名称各不相同。所有文件名中都没有空格。没有子文件夹 我有一个纯文本文件(filelist.txt),其中有几百个文件名,都没有扩展名。所有文件名在文件夹/files/中都有相应的文件,但扩展名不同。有些可能在文件夹/files/中有多个具有不同扩展名的对应文件 filelist.txt中的一个示例: WP_20160115_15_11_

前言:我不是一个很好的shell脚本编写者,事实上我根本不是一个shell脚本编写者

我有一个文件夹(
folder/files/
),里面有数千个文件,扩展名和随机名称各不相同。所有文件名中都没有空格。没有子文件夹

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

filelist.txt
中的一个示例:

WP_20160115_15_11_20_Pro
P1192685
100-1373
HPIM2836
例如,这些文件可能对应于
文件夹/files/
中的以下文件:

WP_20160115_15_11_20_Pro.xml
P1192685.jpeg
100-1373.php
100-1373.docx
HPIM2836.avi
(注意名为
100-1373
的两个文件具有不同的扩展名。)

我在一台OSX(10.11)机器上工作。我需要做的是
文件夹/files/
中与
文件列表.txt中的文件名匹配的所有文件复制到
文件夹/copiedfiles/

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

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


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
读取文件名时
做
find/path/to/folder/files/-maxdepth 1-type f\
-名称“$filename*”-exec cp{}/path/to/folder/copiedfiles/\;

我同意,只要仔细阅读所使用的各个命令,它就应该。然而,出于某种原因,情况并非如此。它运行一秒钟左右,不会给出任何错误消息,但实际上也不会复制任何文件。如果我尝试(不熟练地)通过添加第二个
-exec ls{}进行调试参数,它也不做任何事情,没有任何输出。我肯定错过了一些重要的东西,但我不知道是什么。所有文件夹路径都应该有尾随斜杠和转义空格,对吗?对,设法让它工作。问题是文本文件有Windows CRLF行结束符,而不是Unix LF行结束符,因此
$filename.*
扩展为
100-1373\r.*
,这当然不存在。切换到LF线结尾修复了它。@JanusBahsJacquet这确实是一个精彩的即兴创作。