我正在寻找一个可以让我执行与此等效操作的 Linux 命令:
cp /some/path/file /another/path/ && ln -sf /another/path/file /some/path/
如果没有,那么对一堆文件执行此操作的最佳方法是什么?
答案1
需要注意的是,您可以两次使用 ln 来使命令实际上不移动数据(假设两个路径都在同一个文件系统上)。
ln /some/path/file /another/path/ && ln -sf /another/path/file /some/path/
但我假设您想将 /some/path/ 的内容移动到另一个磁盘,然后创建指向新文件的链接,以便“没有人”注意到。
for f in `ls /some/path/`; do ln /some/path/$f /another/path/ && ln -sf /another/path/$f /some/path; done
将其包装在 Bash 函数中:
function cpln {
for f in `ls $1`
do
ln $1/$f $2 && ln -sf $2/$f $1
done
}
答案2
这是您可以使用的我的脚本(采用两个参数 /some/path/file 和 /another/path/ ):
#!/bin/bash
cp $1 $2
if [ "$?" -ne "0" ]; then
echo "Some error"
exit 1
fi
ln -sf $2/${1##*/} ${1%/*}
答案3
说真的,我以为这是一个非常简单的问题。
以下是我可以用 perl 做的事情:
#!/bin/perl
# Usage: cpln TARGETDIR SOURCE...
# Example: find tree/ -type f | xargs cpln commands/
$target = shift;
foreach(@ARGV) {
m[(.*)/([^/]+)];
system("cp $_ $target");
system("ln -sf $target/$2 $1/");
}
我希望有更优雅的东西,但我想我会用它。