我只是想复制一个文件夹并省略一些内容。
这样就可以了:复制目录并/stuff
省略其中的文件夹foo
moo
cp -r ./myDir/stuff/!(foo|moo) "$destination"
但这并不
local dir="./myDir/stuff";
cp -r "$dir"!(foo|moo) "$destination"
抛出错误
syntax error near unexpected token `('
我很不擅长将表达式与变量连接起来,花了一个小时尝试使用括号和其他一些方法,但没有成功
答案1
cp 不执行正则表达式,但你可以这样做
dir="./myDir/stuff/"
dest="/stuff"
cp -r $(ls -1 "$dir" | grep -v foo | grep -v bar ) "$dest"
分解
dir="./myDir/stuff/"
将变量设置dir
为./myDir/stuff/
引号是为了防止通配符,也就是说如果你这样做/foo/bar *2000/
,"/foo/bar *2000"
第一个将是两个参数,并且还会添加额外的东西,而第二个将是一个参数dest="/stuff"
相同但设置dest
变量cp -r $(ls -1 "$dir" | grep -v foo | grep -v bar ) "$dest"
第一个
cp -r
副本,但它也会复制目录$(commands )
运行命令,然后将它们用作参数,注意这里仍然是一个全局变量,这很好,因为 bash 会使用空格和换行符并将它们用作单独的参数,因此文件1 2 3 4
不会被视为一个东西,注意如果你不想要全局变量,请使用引号ls -1 "$dir" 列出内容
$dir
并在换行符上输出每个内容|
通过管道将文本从 stdout 传输到下一个命令的 stdin 中,并使用名称管道grep -v
grep 但不是只列出匹配的行,而是列出除匹配之外的所有内容)
接近$(
“$dest” 告诉 cp 要复制的目的地,注意引号以防止出现全局
我希望这能回答你的问题,我为此付出了很多努力