Answers:
如果要递归复制文件夹的内容(将引发1错误,请参见以下替代方法):
cp -r * sub/
有点黑,但可用于非空子目录:
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
另一个单线:
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
还是递归的:
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
find
代码满意:D
xargs
或-exec
。无需grep
使用! -name "$TARGETDIR"
或类似用途。您周围的报价无与伦比$file
。我认为cp
,除了第一个命令外,递归不会像您期望的那样工作。
target
如果您的shell是bash,则假设为目标子目录的名称:
shopt -s extglob
cp -r !(target) target/
在ksh中,您可以直接执行cp -r !(target) target/
。
在zsh中,你可以做setopt ksh_glob
,然后cp -r !(target) target/
。setopt extended_glob
然后是另一种可能性cp -r ^target target/
。
这对您有用吗?
cp -r * subdir/
如果您打算移动而不是将当前目录中的所有内容都复制到子目录中,则可以执行以下操作:
mv * subdir/
这会将所有内容(包括点文件,不包括目标目录本身)复制到目标目录SUBDIR
:
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
这进去说文件dirCopy.sh
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
在控制台中将其作为“ sh dirCopy.sh”运行
ls
:for file in *
。不需要反引号-使用$()
。不需要$()
在cp
命令前后加上引号(或)(这将产生错误消息)。