我想创建一个名为 package.sh
的脚本,它应该:
- 使用目录作为输入参数(可以是相对或绝对路径名)
- 递归识别输入目录的所有子目录并在/tmp/中重新创建此结构。例如:对于输入参数
/home/eddy
,创建目录/tmp/eddy
。 - 将输入目录下的所有文本文件和脚本文件复制到
/tmp
中的相应目录下
我是 bash 脚本的新手,所以我想得到一些帮助。 非常感谢
最佳答案
然后是这样的:
#!/bin/bash
cp -r `realpath $1` /tmp
这会将作为第一个参数给出的目录复制到/tmp。
但是正如您所说,您只需要复制 *.txt 和 *.sh 文件,所以这应该可以代替
#!/bin/bash
cp `find $1 -name "*.txt" | xargs realpath` /tmp
cp `find $1 -name "*.sh" | xargs realpath` /tmp
但是这不会像您想要的那样重新创建目录结构,因此您需要 cpio
#!/bin/bash
find $1 -regextype posix-awk -regex "(.*\.txt|.*\.sh)" | cpio -pdv /tmp
要包含 .sh 文件必须设置可执行标志的条件(如果未设置则跳过复制),那么我们必须使用两行:
#!/bin/bash
find $1 -name "*.txt" | cpio -pdv /tmp
find $1 -perm /u=x,g=x,o=x -name "*.sh" | cpio -pdv /tmp
关于linux - bash script linux - 使用目录作为用户输入参数并将所有子目录复制到与输入目录同名的/tmp/文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23598397/