Linux拷贝查找和压缩文件

1.使用普通账户新建如下结构的2个目录: ~/t1/t2/t3/t4,~/m1/m2/m3/m4,并显示t1目录的详细信息,将/etc/passwd文件拷贝到~/t1/t2/t3目录下面,将~/t1/下面的内容拷贝到~/m1/m2/m/3/m4目录下面,最后删除~/t1/t2/t3下面的目录。

[hage@server ~]$ mkdir -p ~/t1/t2/t3/t4                #创建t1目录及其子目录

[hage@server ~]$ mkdir -p ~/m1/m2/m3/m4        #创建m1目录及其子目录

[hage@server ~]$ cp /etc/passwd ~/t1/t2/t3         #拷贝/etc/passwd到~/t1/t2/t3
[hage@server ~]$ cp -r ~/t1/ ~/m1/m2/m3/m4/    #拷贝~/t1/目录到~/m1/m2/m3/m4
[hage@server ~]$ rm -rf ~/t1/t2/t3/                       #删除~/t1/t2/t3目录

2.在/下创建一个myDocument目录 和 一个Dm1文件,将Dm1文件移动到myDocument目录下,最后修改myDocument目录为test1

[root@server ~]# mkdir /myDocument                    #在根下创建myDocument目录
[root@server ~]# touch /Dm1                                 #在根下创建Dm1文件
[root@server ~]# mv /Dm1 /myDocument/             #移动Dm1文件到myDocument目录下
[root@server ~]# ls /myDocument/                         #查看myDocument目录
Dm1
[root@server ~]# mv /myDocument/ test1              #更改myDocument目录为test1
[root@server ~]# ls test1                                        #查看test1
Dm1

3.在用户家目录下新建 dir2 目录,其下创建文件 a.txt,使用 echo 命令书写内容到 a.txt,并备份文件到/backup 目录,最后显示/backup/a.txt中内容到屏幕

[root@server ~]# mkdir dir2                                      #创建dir2目录
[root@server ~]# mkdir /backup                               #创建/backup目录
[root@server ~]# cd dir2/                                         #到dir2目录下
[root@server dir2]# touch a.txt                                #创建a.txt文件
[root@server dir2]# echo "Hello world!" > a.txt        #添加内容到a.txt
[root@server dir2]# cd                                             #到家目录下
[root@server ~]# cp dir2/a.txt /backup/                    #拷贝a.txt到/backup下
[root@server ~]# cat /backup/a.txt                           #输出内容
Hello world!

4.find命令

(1)在 /tmp以及 /root 中新建passwd文件,查找所有的passwd文件,查找/etc    /tmp  /root  中的passwd文件

[root@server ~]# cd /tmp/                                                     #进入/tmp目录
[root@server tmp]# touch passwd                                        #创建passwd文件
[root@server tmp]# cd /root/                                                 #进入/root目录
[root@server ~]# touch passwd                                            #创建passwd文件  
[root@server ~]# find -name "passwd"                                 #查找passwd文件                       
./temp/etc/pam.d/passwd
./temp/etc/passwd
./passwd

[root@server root]# cd /                                                        #进入根目录
[root@server root]# find /etc/tmp/root -name "passwd"        #查找passwd文件
/etc/tmp/root/passwd

(2)查找 /tmp 目录下名字为ssh开头的所有文件

[root@server ~]# find /tmp/ -name "ssh*"

(3)查找/dev目录下的d开头文件

[root@server ~]# find /dev -name "d*"
/dev
/dev/dmmidi
/dev/dm-1
/dev/dm-0
/dev/dri
/dev/disk
/dev/disk/by-id/dm-uuid-LVM-Q3vXSfvoHpf8LRFW6sQfhTdU1Dxyf1xnrM2YaoJk4oysLDE8j5rfg9WBqr7Ml1yn
/dev/disk/by-id/dm-name-rhel-swap
/dev/disk/by-id/dm-name-rhel-root
/dev/disk/by-id/dm-uuid-LVM-Q3vXSfvoHpf8LRFW6sQfhTdU1Dxyf1xnn0rEmrQgfHdWXxKHStAQKC6XoWnmItRF
/dev/dma_heap

(4)根目录下查找a文件或者b文件

[root@server ~]# find / -name "a" -o -name "b"
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
/usr/share/terminfo/a
/usr/share/terminfo/b

(5)显示网卡文件的路径

[root@server ~]# find /etc/NetworkManager/system-connections -name 'ens*'
/etc/NetworkManager/system-connections/ens160.nmconnection

(6)在根目录下查找为root用户的所有脚本文件

[root@server ~]# find / -name "*.sh" -a -user root

(7)在/etc 中查找以a开头或以b开头的头文件

[root@server ~]# find /etc -name "a*.h" -o -name "b*.h"

(8)在/home中查找不是root账户的文件

  [root@server ~]# find /home -not -user root

(9)在 /tmp 中查找5天以内修改过的文件

[root@server ~]# find /tmp -mtime -5

(10)在 /etc 中查找7天以内没有修改过的文件

  [root@server ~]# find /etc -not -mtime -7

(11)在/ 中查找3天以内修改过的目录文件

[root@server ~]# find / -mtime -3 -type d

(12)在/dev 下查看所有块设备文件

[root@server ~]# find /dev -type d

(13)查找 /etc目录下大于1000k的文件

[root@server ~]# find /etc -size +1000k
/etc/udev/hwdb.bin
/etc/selinux/targeted/policy/policy.33
/etc/insights-client/rpm.egg

(14)查找所大于400M的文件

[root@server ~]# find -size +400M
./rhce/bigdata/nvme0n1p3

(15)查找小于1G的文件

[root@server ~]# find -size -1G

(16)查找等于50k的所有文件

[root@server ~]# find -size 50k

(17)在/etc 查找权限为777的文件

[root@server ~]# find /etc -perm 777

(18)查找/dev目录下的空文件或目录

[root@server ~]# find /dev -empty -o -empty -type d 
/dev/mqueue
/dev/hugepages
/dev/shm

5.在~目录下新建目录tests1,进入目录后新建t1.txt  t2.txt  ,将“hello  world!”字符串写入t3.txt中,最后将tests1目录打包压缩为tests1.tar.gz 并移动到/tmp目录下

[root@server ~]# mkdir tests1

[root@server ~]# cd tests1

[root@server tests1]# touch  t1.txt t2.txt

[root@server tests1]# echo "Hello world!" > t3.txt

[root@server tests1]# cd
[root@server ~]# tar -cvf tsets1.tar.gz tests1

[root@server ~]# mv tests1.tar.gz /tmp

6.将上例/tmp目录下的tests1.tar.gz拷贝到/etc/tests2中,并解压缩,将t3.txt中的内容显示到屏幕上

[root@server ~]# cp -r /tmp/tests1.tar.gz /etc/tests2

[root@server ~]# cd /etc/tests2/

[root@server tests2]# tar -xvf tests1.tar.gz
[root@server tests2]# cd tests1/
[root@server tests1]# cat t3.txt 
Hello world!

<think>好的,我现在需要帮助用户找到一个在Linux系统中拷贝文件的脚本。首先,用户的问题是关于如何编写一个脚本来实现文件拷贝,可能需要参考之前的引用内容。 首先,我要回忆用户提供的引用内容。引用[2]提到了在Android.mk中使用拷贝脚本的例子,使用了`copy_from``copy_to`变量,以及`$(ACP)``transform-prebuilt-to-target`命令。这可能涉及到Makefile的语法,但用户可能需要的是一个Bash脚本,而不是Makefile的片段,所以可能需要调整思路。 引用[4]详细介绍了Linux中tar命令的选项,比如-c、-x、-z等参数,但用户的问题是关于拷贝文件,而不是打包或压缩,所以这部分可能相关度不高。不过,如果用户需要保留文件属性,可能需要使用cp命令的特定参数,比如-a来归档模式,这可能保留权限时间戳。 引用[3]提到了文件编码的问题,但用户的问题是关于拷贝,所以暂时不考虑这个问题,除非用户遇到编码错误,但当前需求没有提到。 引用[1]中的脚本示例使用了dusort来查找文件,然后处理文件名。这可能查找文件并拷贝有关,但用户的需求是直接拷贝,所以可能需要更直接的脚本。 用户需要的是一个拷贝文件的脚本,可能需要基本的功能,比如指定目录目标目录,处理多个文件,或者递归拷贝目录。可能需要考虑错误处理,比如目标目录是否存在,文件是否已经存在,是否覆盖等。 接下来,我应该考虑如何构建这个脚本。基本的cp命令就可以完成拷贝,但写成脚本的话,可能需要参数化源路径目标路径。例如,用户可能希望输入源目录目标目录作为参数,然后脚本遍历源目录中的文件并拷贝到目标目录。 另外,引用[2]中的Makefile示例使用了类似批量拷贝的方法,可能可以用循环结构来处理多个文件。在Bash脚本中,可以使用for循环遍历文件,然后逐个拷贝。 还需要考虑权限问题,是否需要使用sudo,或者脚本是否有执行权限。此外,是否保留文件属性,如时间戳、权限等,使用cp的-a选项可能更好。 可能的脚本结构: 1. 检查输入参数是否正确,比如源路径目标路径是否存在。 2. 使用cp命令进行拷贝,可能带递归选项-R或-r。 3. 添加错误处理,比如如果目标不存在则创建目录。 4. 可能记录拷贝日志,或者显示进度。 例如,一个简单的脚本可能如下: ```bash #!/bin/bash source_dir=$1 target_dir=$2 if [ ! -d "$source_dir" ]; then echo "源目录不存在" exit 1 fi mkdir -p "$target_dir" cp -av "$source_dir"/* "$target_dir/" ``` 这个脚本接受两个参数,源目录目标目录,检查源目录是否存在,创建目标目录(如果不存在),然后使用cp命令的-a(归档模式)-v(显示详细信息)选项拷贝所有文件。 此外,用户可能需要更复杂的逻辑,比如过滤特定文件类型,或者处理多个源文件。例如,引用[1]中的脚本使用duawk处理文件名,可能可以结合find命令来查找特定文件并拷贝。 另外,根据引用[4],如果用户需要打包后再拷贝,可能需要结合tar命令,但用户的问题直接是拷贝文件,所以可能不需要。 可能还需要考虑符号链接的处理,是否跟随链接,或者保留链接。cp命令的选项可能需要调整,比如-P不跟随,-L跟随。 最后,给出脚本示例,并解释每个部分的作用,确保用户理解如何修改使用。</think>在Linux系统中实现文件拷贝的脚本可通过bash脚本结合`cp`命令实现。以下提供两种常用脚本方案: --- ### 方案一:基础批量拷贝脚本 ```bash #!/bin/bash # 基础文件拷贝脚本(带错误检查) source_dir="/path/to/source" # 替换为实际源目录 target_dir="/path/to/destination" # 替换为实际目标目录 # 检查源目录是否存在 if [ ! -d "$source_dir" ]; then echo "错误:源目录 $source_dir 不存在" exit 1 fi # 创建目标目录(如果不存在) mkdir -p "$target_dir" # 执行拷贝操作(保留文件属性) cp -av "$source_dir"/* "$target_dir"/ echo "文件拷贝完成" ``` #### 参数说明: - `-a`:归档模式,保留文件权限、时间戳等属性[^4] - `-v`:显示操作细节 - `/*`:拷贝目录下所有文件(不含隐藏文件) --- ### 方案二:高级过滤拷贝脚本 ```bash #!/bin/bash # 带文件过滤的拷贝脚本 source_dir="/path/to/source" target_dir="/path/to/destination" file_extension="*.txt" # 指定文件扩展名过滤 # 使用find进行高级过滤 find "$source_dir" -type f -name "$file_extension" -exec cp -v {} "$target_dir" \; ``` #### 功能亮点: 1. 通过`-name`参数过滤特定类型文件(如`.txt`) 2. 使用`find`命令递归处理子目录 3. 支持通配符匹配 --- ### 关键知识点 1. **权限保留**:使用`cp -a`可保留文件所有者、时间戳等信息,适用于备份场景[^4] 2. **递归拷贝**:添加`-R`参数可拷贝目录及其子目录 3. **覆盖策略**:添加`-i`参数实现覆盖前询问,`-u`参数仅更新新文件 4. **符号链接处理**:`-P`保留链接,`-L`跟随链接拷贝实际文件 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值