代码之家  ›  专栏  ›  技术社区  ›  YFl

如何在将原始文件作为符号链接到新位置的同时移动文件?

  •  0
  • YFl  · 技术社区  · 1 年前

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

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

    移动 my-file my-folder 并保存 我的文件 在原始位置,使用指向新位置的符号链接,我必须分几个步骤完成:

    移动:

    >> 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
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   mandy8055    1 年前

    中提到的一种方式 comment 通过 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 然后创建 symlink 到原始位置的新位置 ln -s

    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