![符号链接所有文件但复制某些扩展名](https://linux22.com/image/1284422/%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E4%BD%86%E5%A4%8D%E5%88%B6%E6%9F%90%E4%BA%9B%E6%89%A9%E5%B1%95%E5%90%8D.png)
我想知道如何才能符号链接目录结构中的所有文件,然后复制该目录中具有特定扩展名的文件。我基本上是将 /foo/a,b,c 中的所有文件符号链接到 /bar/a,b,c,然后复制具有特定扩展名的某些文件。
答案1
从 /bar 目录,为除这些扩展之外的所有内容创建符号链接。
find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \;
然后复制所有扩展,大部分命令相同。
find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \;
编辑:复制整个目录结构,符号链接某些文件,复制其他文件。一开始不确定是否可以使用单个命令来实现这一点,但刚刚学到了一些使用 find 的其他方便技巧。
find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh
mv bar/foo/* bar/ && rm -R bar/foo/
唯一需要注意的是,在创建符号链接时,您需要提供与 foo/ 相关的实际路径。我的示例显示了并排的相对链接(也可以创建绝对符号链接)。