Linux:结合“ls”和“cp”命令

时间:2014-01-11 17:57:59

标签: linux shell

命令

ls -l | egrep '^d'

列出CWD中的所有目录。

这个命令

cp a.txt /folder 

将文件a.txt复制到名为“folder”的文件夹

现在我该如何组合2命令,以便将文件a.txt复制到CWD中的所有文件夹。

2 个答案:

答案 0 :(得分:4)

cp命令不会占用多个目的地,但您可以随时尝试:

for DEST in `command here` ; do cp a.txt "$DEST" ; done

反引号内的命令可能是一个在标准输出上产生目录列表的命令,但我怀疑ls -l | egrep '^d'是这样一个命令。无论如何,你的问题的标题是关于组合ls和cp命令,这是我的答案。要真正实现您想要做的事情,最好使用find


find . -maxdepth 1 -type d ! -name "." -exec cp a.txt {} \;这样的东西可能会做你真正想要的。 find命令是一种特殊情况,它具有-exec选项,可以轻松地与其他命令结合使用。您也可以使用(但是当有很多目录时,其他版本会失败):

for DEST in `find . -maxdepth 1 -type d ! -name "."` ; do cp a.txt "$DEST" ; done

答案 1 :(得分:3)

Don't use ls in scripts。请改用通配符。

您必须遍历目标目录,因为cp一次复制到一个目的地。

for d in */; do
  if ! [ -h "${d%/}" ]; then
    cp a.txt "$d"
  fi
done

模式*/匹配当前目录中的所有目录(除非它们的名称以.开头),以及指向目录的符号链接。对${d%/}$d没有最终/)的测试不包括符号链接。