首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bash中带有变量的硬链接递归复制目录?

如何使用bash中带有变量的硬链接递归复制目录?
EN

Unix & Linux用户
提问于 2023-04-02 21:05:50
回答 2查看 73关注 0票数 2

我要做的操作是取目录1:

代码语言:javascript
复制
Dir1
    Dir A
        File A
    Dir B
        File B

然后使用find命令检查Dir 1中的每个文件是否有现有的硬链接,如下所示:

代码语言:javascript
复制
find . -type f -links 1 -exec cp -al {} /path/to/Dir2/{} \;

然后我想要结束:

代码语言:javascript
复制
Dir2
    Dir A
        File A (hardlink)
    Dir B
        File B (hardlink)

现在,我知道如何找到目录中的每个非硬链接文件,并将这些文件的硬链接放置在不同的目录中,但在创建新的硬链接时,我希望保持相同的目录结构。我现在的命令会产生这样的结果:

代码语言:javascript
复制
Dir2
    File A (hardlink)
    File B (hardlink)

假设我正在查看文件B,而B文件只有一个链接(还没有硬链接),我如何引用"Dir B“才能将该目录复制到新目录?我不想要"/Path/To/Dir B“只是"Dir B”。

有没有办法在bash中完成这一任务?

EN

回答 2

Unix & Linux用户

发布于 2023-04-03 12:39:06

您可以使用像findmkdir这样的工具来实现这一点。

在bash文件中,.sh不要忘记将/ path / to /Dir1替换为源目录路径,将/ path /to/Dir2替换为目标目录路径。

代码语言:javascript
复制
#!/bin/bash

src_dir="/path/to/Dir1"
dest_dir="/path/to/Dir2"

find "$src_dir" -type d -print0 | while IFS= read -r -d '' dir; do
    dest_subdir="${dir/$src_dir/$dest_dir}"
    
    mkdir -p "$dest_subdir"
    
    find "$dir" -maxdepth 1 -type f -links 1 -print0 | while IFS= read -r -d '' file; do
        cp -al "$file" "$dest_subdir"
    done
done
票数 0
EN

Unix & Linux用户

发布于 2023-04-03 15:51:38

是的,您可以在bash中使用rsync命令而不是cp来完成此任务,并修改find命令以使用变量。下面是一个适合您需要的示例命令:

代码语言:javascript
复制
#!/bin/bash
# Set source and destination directories
src_dir="Dir1"
dest_dir="Dir2"

# Use find to locate all files in source directory with only one link
find "$src_dir" -type f -links 1 | while read file; do
  # Get the directory name of the file and create the corresponding directory in the destination
  dir=$(dirname "$file")
  mkdir -p "$dest_dir/$dir"

  # Copy the file using rsync with the -l (hardlink) option
  rsync -av --link-dest="$src_dir" "$file" "$dest_dir/$file"
done
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/741745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档