bash脚本linux - 使用目录作为用户输入参数,并将所有子目录复制到/ tmp / folder,其名称与输入目录相同

时间:2014-05-11 21:58:21

标签: linux bash

我想创建一个名为package.sh的脚本,该脚本应该:

  • 使用目录作为输入参数(可以是相对路径名或绝对路径名)
  • 递归识别输入目录的所有子目录,并在/ tmp /中重新创建此结构。例如:对于输入参数/home/eddy,将创建目录/tmp/eddy
  • 输入目录下的所有文本文件和脚本文件都应该复制到/tmp
  • 中的相应目录

我是bash脚本的新手,所以我想得到一些帮助。 非常感谢

2 个答案:

答案 0 :(得分:1)

为什么不将该目录/home/eddy复制到/tmp?如果您使用--exclude进行复制以便过滤所需的文件,则可以使用一些rsync标记。

答案 1 :(得分:1)

那样的话:

#!/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