符号链接所有文件但复制某些扩展名

符号链接所有文件但复制某些扩展名

我想知道如何才能符号链接目录结构中的所有文件,然后复制该目录中具有特定扩展名的文件。我基本上是将 /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/ 相关的实际路径。我的示例显示了并排的相对链接(也可以创建绝对符号链接)。

相关内容