例如bash
,假设我想链接目录中的部分文件(但不是全部),例如,
ln -s /dir/file1 /dir/file2 ... /other/dir
但文件名称的格式不遵循一些简单的规则,所以我们不能使用类似
ln -s /dir/file* /target/dir.
有什么办法可以不重复吗/dir
,例如:
/dir/{file1 file2 ...} = /dir/file1 /dir/file2 ...
因此我们可以做类似的事情:
ln -s /dir/{file1 file2 ...} /target/dir
答案1
是的,语法与您想要执行的操作非常相似。说:
ln -s /dir/{file1,file2,foo,bar} /target/dir
将文件file1
、file2
、foo
、bar
从链接/dir/
到/target/dir/
。
上述语法称为括号扩展。
(大括号扩展导致/dir/{file1,file2,foo,bar}
扩展为/dir/file1 /dir/file2 /dir/foo /dir/bar
。)
答案2
对于复杂的规则,请尝试这样做:
cd dir
find . -name 'file1*' -or -name 'file2*' -or ... -exec ln -s '{}' '/other/dir/{}' ';'
请注意,所有 '*'、'{}' 和 ';' 都必须用引号引起来,以防止 shell 扩展和原始传递以进行查找!
对于简单的枚举来说,shell 扩展{aa,bb,cc}
是否足够好。