linux - bash script linux - 使用目录作为用户输入参数并将所有子目录复制到与输入目录同名的/tmp/文件夹

标签 linux bash

我想创建一个名为 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/

相关文章:

linux - bash 将日志文件复制到单独的目录中

bash - 在两个 IPv4 地址之间以 CIDR 表示法查找 IPv4 网络的算法

客户端/IP 和设备监视器

linux - Bash:使用新的 PGID 生成一个进程

python - 从linux中的 Pandas 数据框列中减去日期

linux - 快速 linux 问题

regex - bash 扩展的正则表达式运算符

android - 当通过管道传输两个命令时,将输出重定向到/dev/null?

bash - 如何最好地包含其他脚本?

linux - Sed错误:sed:-e表达式#1,字符12:`s'的未知选项