gpt4 book ai didi

linux - 用于将目录结构从源目录复制到目标目录的 Bash 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:13:44 25 4
gpt4 key购买 nike

我是 Bash 脚本的新手,为了进行一些练习,我正在尝试编写一个包含源目录和目标目录的脚本。该脚本将搜索源目录并将其子目录结构复制到目标目录中(将忽略任何文件,只复制目录本身)。源目录可以有任意深度的任意数量的子目录。实现这一目标的最佳方法是什么?我已经开始尝试编写一个递归函数,如果找到一个目录,该函数将递归地调用到该目录中。但是,由于我缺乏脚本编写经验,我被难住了。

这是我目前所拥有的:

#! /bin/bash

if [ ! $# -eq 2 ]; then
echo "ERROR: Script needs 2 arguments: $0 source/directory/ target/directory/"
exit
fi

SOURCE_DIR=$1
TARGET_DIR=$2

function searchForDirectory {
for FILE in ls $SOURCE_DIR/*; do #should be 'ls *current_directory*'
if [ -d $FILE ]; then
searchForDirectory #call function recursively onto $FILE
#Do stuff here to create copy of this directory in target dir
fi
done
}

if [ ! -d $SOURCE_DIR ]; then
echo "ERROR: Source directory does not exist"
exit
else
searchForDirectory
fi

我知道这只是一个骨架函数,还需要做更多的工作,但我只是在寻求指导,看看这是否是正确的方法,然后再进行任何操作进一步,如果是这样,我的下一步是什么?如何将目录传递到我的函数中?

编辑:感谢下面 Ivan 的帮助,这是我的解决方案 #!/斌/庆典

if [ ! $# -eq 2 ]; then 
echo -e "\nERROR: Script needs 2 arguments:\n$0 source/directory/ target/directory/\n"
exit
fi

function recursiveDuplication {
for file in `ls $1`; do
if [ -d $1/$file ] && [ ! -d $2/$file ]; then
mkdir $2/$file
recursiveDuplication $1/$file $2/$file
elif [[ $1/$file == *.png ]]; then
convert $1/$file $2/$file
fi
done
}

if [ ! -d $1 ]; then
echo -e "\nERROR: $1 does not exist\n"
exit
elif [ -d $2 ] && [ ! -w $2 ]; then
echo -e "\nERROR: You do not have permission to write to $2\n"
exit
elif [ ! -d $2 ]; then
echo -e "\nSUCCESS: $2 has been created"
mkdir $2
fi

recursiveDuplication $1 $2

这个解决方案有两个问题:

  1. 正如 Rany Albeg Wein 在下面解释的那样,使用“ls”并不是一个好的解决方案 - 我已经明白了当目录/*.png 名称中有空格时的原因。

  2. 我还尝试将任何 *.png 文件从源复制到目标,并将其转换为目标中的 *.jpg 图像。我怎样才能做到这一点?我正在尝试使用 ImageMagick 的 convert image.png image.jpg 命令,但是当 image.png 被称为 时我不知道该怎么做$文件?

最佳答案

你可以简化很多

$ find a -type d | xargs -I d mkdir -p copy/d

将树结构从目录a复制到copy下的新目录

$ tree a
a
|-- b
| |-- c
| | `-- file4
| |-- d
| | `-- file4
| `-- file3
`-- file2

3 directories, 4 files


$ tree copy
copy
`-- a
`-- b
|-- c
`-- d

4 directories, 0 files

关于linux - 用于将目录结构从源目录复制到目标目录的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com