根据输入列表复制文件,文件名中包含特殊字符

帕特里克

这是基于这里的问题

问题

  • 我有一个.txt文件,列出了要复制到外壳程序(Mac Terminal)中的newfolder文件夹中的文件名

方法,其中filelist.txt包含我要复制的文件名(用\ n分隔):

# version 1
for file in $(cat filelist.txt); do cp "$file" newfolder; done

错误:

如果我在filelist.txt中有包含破折号,空格等的文件名,则名称会被拆分,并且我会正确地得到一个No such file错误。

这是我尝试解决的方法(在变量中添加dbl引号):

# version 2
for file in "$(cat filelist.txt)"; do cp "$file" newfolder; done

但这会打印出所有文件名(在空白处不分割),并且不复制任何内容。

问题:

  • 如上添加引号可解决名称拆分问题,例如当我将其提供给echo;时。为什么不起作用cp

  • 什么是这样做的正确的方式catcp上面链接的答案中的注释建议以下内容:

    set -f;IFS=$'\n'

可以解决问题,但我不知道它能做什么。

任何提示,不胜感激!

吉姆·杜拉特(Ljm Dullaart)

有很多选择。这是一:

cat filelist.txt | while read file; do
    cp "$file" newfolder
done

所以,首先为什么

for file in $(cat filelist.txt); do cp "$file" newfolder; done

不行?假设您的文件列表包含

a
b c

$(cat filelist.txt)产生的文件名列表。for循环看到的输出cat并将其解释为:

for file in a b c ; do

这显然不是目的。

这是有关“输入字段分隔符”的注释的帮助之处。通常,IFS是任何空格,因此文件名中的空格将被解释​​为文件名之间的分隔。如果将IFS显式设置为换行符,则不再将空格视为分隔符。

for file in "$(cat filelist.txt)"; do cp "$file" newfolder; done

为for循环创建一个参数。结果等于:

for file in "a b c" ; do

因此,该循环仅使用不存在的文件名执行一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法删除文件名中包含特殊字符的文件

来自分类Dev

无法删除文件名中包含特殊字符的文件

来自分类Dev

从文件名中删除特殊字符

来自分类Dev

文件名Java中的特殊字符

来自分类Dev

从文件名中删除特殊字符

来自分类Dev

批处理文件可根据文件名中的字符复制文件并远程执行

来自分类Dev

c#尝试使用WebClient下载文件名中包含特殊字符的文件

来自分类Dev

在Perl中以特殊字符打开文件名中的文件

来自分类Dev

根据文件名中的时间戳值复制文件

来自分类Dev

根据文件名中的日期复制文件

来自分类Dev

根据文件名中包含的日期查找文件

来自分类Dev

正则表达式检查输入目录/路径中文件名中的特殊字符

来自分类Dev

Bash:复制包含(很多)特殊字符的文件列表

来自分类Dev

在Linux中批量删除文件名中的特殊字符

来自分类Dev

在Windows中从文件名中批量删除特殊字符

来自分类Dev

从powershell中的文件名中删除特殊字符

来自分类Dev

更改bash中具有特殊字符的文件名

来自分类Dev

删除文件名中带有特殊字符的目录

来自分类Dev

文件名中的特殊字符(\#033OA)

来自分类Dev

Powershell从文件名中删除特殊字符

来自分类Dev

bash-处理文件名中的特殊字符

来自分类Dev

终端命令:处理文件名中的特殊字符

来自分类Dev

文件名和路径中的特殊字符

来自分类Dev

从文件名中删除某些特殊字符

来自分类Dev

如何在ffmpeg的输出文件名中包含输入文件名

来自分类Dev

在文件中输入列表项

来自分类Dev

带有特殊字符的文件名

来自分类Dev

无法从文件名读取特殊字符

来自分类Dev

将文件名从目录导入列表框

Related 相关文章

热门标签

归档