这个问题是我先前提出的问题的续集,该问题使用来创建许多目录mkdir
。
我正在使用bash
外壳。我使用以下命令创建了五十个目录,每个目录以前缀“ s”开头:
mkdir $(printf "s%02i " $(seq 1 50))
用零填充到第二个数字。也就是说,我获得目录的形式为s01
,s02
,..., ,。s49
s50
现在,我想cp
用来将单个文件(例如test.txt
)复制到五十个目录中的每个目录中。是否可以通过与上述类似的方式来执行此操作?例如,以下工作有效吗?我是Unix / Linux的新手,所以我真的不想尝试此操作,直到有人请给我表明它是安全的。
cp test.txt $(printf“ s%02i.txt” $(seq 1 50))
查看的man
页面cp
,它似乎不cp
支持这样的多个目标,但是:
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options
too.
如果要使用命令的输出将文件复制到使用的每个目录cp
,则可以始终通过管道将其传输到xargs
:
printf "s%02i " $(seq 1 50) | xargs -n 1 cp test.txt
由于您事先知道输出的格式和内容,因此不必担心解析输出的安全性-遇到文件名中的元字符和空格的风险在这里并不是真正的问题。
另外,假设目录已经存在,您可以尝试如下操作:
find . -maxdepth 1 -type d -name 's[0-9][0-9]' -print0 | xargs -0 -I {} cp test.txt {}
或没有管道:
find . -maxdepth 1 -type d -name 's[0-9][0-9]' -exec cp test.txt {} \;
最后两个命令将在当前目录中找到所有文件cp
test.txt
。该-maxdepth 1
选项将避免任何子目录也接收该文件。被警告,'s[0-9][0-9]'
是对匹配s
后跟任意两位数字,这意味着如果由于某种原因,你s99
在cwd
,它也将收到的副本test.txt
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句