linux 如何移动一个文件,同时使原来的一个符号链接到新的位置?

yyyllmsg  于 6个月前  发布在  Linux
关注(0)|答案(1)|浏览(67)

假设我的工作目录中有一个文件和一个文件夹:

>> tree
.
├── my-file
└── my-folder

字符串
要将my-file移动到my-folder并在原始位置保留my-file,并将符号链接到新位置,我必须通过几个步骤来完成:
移动:

>> mv my-file my-folder
>> tree
.
└── my-folder
    └── my-file


在原始位置创建符号链接:

>> ln -s my-folder/my-file
>> tree
.
├── my-file -> my-folder/my-file
└── my-folder
    └── my-file


有没有一种方法可以在一个步骤中完成?(以及多个文件?)
类似于以下内容:

>> tree
.
├── my-file
└── my-folder

>> move-and-create-symlink-command-??
>> tree
.
├── my-file -> my-folder/my-file
└── my-folder
    └── my-file

clj7thdc

clj7thdc1#

一种方式是在 * pmf * 的 * 评论 * 中提到的;如果你想只在移动成功的情况下才执行链接,可以使用&&连接两者。另一种方法是你可以随时创建你的自定义命令。你可以创建一个自定义shell函数来执行移动和符号链接的创建。将下面的函数添加到你的shell配置文件中(例如,~/.bashrc~/.zshrc通常用于MAC):

move_and_symlink() {
  mv "$1" "$2"
  ln -s "${2%/}/$1" .
}

字符串
然后,获取shell配置文件以使新函数可用:

source ~/.bashrc  # or source ~/.zshrc based on your requirement


现在,您可以使用move_and_symlink命令移动文件并在一个步骤中创建符号链接:

tree
.
├── my-file
└── my-folder

move_and_symlink my-file my-folder
tree
.
├── my-file -> my-folder/my-file
└── my-folder
    └── my-file


上面的自定义函数有两个参数:* 源文件和目标目录 *。它首先使用mv将文件移动到目标目录,然后使用ln -s在原始位置创建一个symlink到新位置。

EDIT(用于操作多个文件h/t * tripleee *):

上述函数可以修改为处理多个文件:

move_and_symlink() {
  # Get the last argument as the destination directory
  dest_dir="${!#}"
  
  # Iterate through all arguments except the last one (the source files)
  for ((i=1; i<$#; i++)); do
    src_file="${!i}"
    mv "$src_file" "$dest_dir"
    ln -s "$dest_dir/$src_file" .
  done
}

# Usage: move_and_symlink file1 file2 file3 destination_folder


Reference

相关问题