移动文件并留下软链接

移动文件并留下软链接

我正在寻找一个可以让我执行与此等效操作的 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/");
}

我希望有更优雅的东西,但我想我会用它。

相关内容