Shell命令-文件及目錄操作之cp、find
1、cp:復制文件或目錄
cp命令的功能說明
cp
命令用於復制文件或目錄。cp命令的語法格式
cp
[OPTION]... SOURCE... DIRECTORYcp
[參數選項] [源文件或源目錄] [目標文件或目錄]cp命令的選項說明
cp
選項就幾個,表1為cp
命令的參數及說明:表1:
cp
命令的參數及說明
參數選項 | 解釋說明(帶*的為重點) |
---|---|
-r | 復制目錄 * |
-p | 保持文件或目錄屬性 |
-a | 相當於同時使用參數-d,-p,-r * |
-i | 提示是否覆蓋的確認 |
-d | 如果復制的源文件為鏈接文件,僅復制符號鏈接本身,且保留符號鏈接所指向的目標文件或目錄 |
cp命令的實踐操作
範例1: 無參數和帶參數
-a
的比較
[[email protected] /test]# pwd /test [[email protected] /test]# ll -h total 0 drwxr-xr-x 3 root root 18 Apr 5 18:52 dir1 drwxr-xr-x 2 root root 6 Apr 4 14:51 dir2 drwxr-xr-x 2 root root 6 Apr 4 14:51 dir3 -rw-r--r-- 1 root root 0 Apr 6 08:26 file1.txt -rw-r--r-- 1 root root 0 Apr 4 14:51 file2.txt -rw-r--r-- 1 root root 0 Apr 4 14:51 file3.txt [[email protected] /test]# cp file1.txt file4.txt [[email protected] /test]# cp -a file1.txt file5.txt [[email protected] /test]# ll -h total 0 drwxr-xr-x 3 root root 18 Apr 5 18:52 dir1 drwxr-xr-x 2 root root 6 Apr 4 14:51 dir2 drwxr-xr-x 2 root root 6 Apr 4 14:51 dir3 -rw-r--r-- 1 root root 0 Apr 6 08:26 file1.txt <-->源文件的屬性 -rw-r--r-- 1 root root 0 Apr 4 14:51 file2.txt -rw-r--r-- 1 root root 0 Apr 4 14:51 file3.txt -rw-r--r-- 1 root root 0 Apr 6 08:27 file4.txt <-->沒加參數的文件屬性 -rw-r--r-- 1 root root 0 Apr 6 08:26 file5.txt <-->加了參數的文件屬性
範例2: 使用
-i
參數的例子
[[email protected] /test]# cp -i file1.txt file5.txt <-->提示是否覆蓋文件? cp: overwrite ‘file5.txt’? n [[email protected] /test]# cp file1.txt file5.txt <-->沒加 -i 為啥也提示? cp: overwrite ‘file5.txt’? n [[email protected] /test]# alias cp <-->因為系統為cp做了別名 alias cp=‘cp -i‘ [[email protected] /test]# \cp file1.txt file5.txt <-->取消別名(或提示)方法1:在前面加[[email protected] /test]# /bin/cp file1.txt file5.txt <-->取消別名(或提示)方法2:使用命令的絕對路徑
範例3: 使用
-r
參數復制目錄
[[email protected] /test]# tree dir1 dir2 <-->看一下dir1和dir2目錄內容
dir1 <--> dir1目錄的內容
└── sub1
└── test
dir2 <--> dir2目錄的內容
2 directories, 0 files
[[email protected] /test]# cp dir1 dir2 <-->顯示跳過目錄dir1
cp: omitting directory ‘dir1’
[[email protected] /test]# cp -r dir1 dir2 <--> 使用 -r 參數
[[email protected] /test]# tree dir1 dir2 <-->查看結果
dir1 <--> dir1目錄的內容
└── sub1
└── test
dir2 <--> dir2目錄的內容(連目錄dir1本身也復制過來了)
└── dir1
└── sub1
└── test
5 directories, 0 files
範例4: 快速備份文件案例
[[email protected] /test]# cp /etc/ssh/ssh_config /etc/ssh/sshd_config.ori <-->正常備份
[[email protected] /test]# cp /etc/ssh/ssh_config{,.ori} <-->快速備份
2、find:查找目錄下的文件或查找目錄
find命令的功能說明
find
命令用於查找目錄下的文件或查找目錄,同時可以調用其他命令執行相應的操作。find命令的語法格式
find
[-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]find
[選項] [路徑] [操作語句]find命令的選項說明
find
選項很多,表1為find
命令的常用的參數及說明:表1:
find
命令的參數及說明(還有很多參數,不再列舉)
參數選項 | 解釋說明 |
---|---|
-name | 按文件名查詢 |
-type | f查找文件;d查找目錄 |
-exec | 對查找的結果再處理 |
-mtime | -n查找更改時間距現在n(正整數)天以內;+n查找更改時間距現在n(正整數)天以前;n查找更改時間距現在n(正整數) |
-perm | 按照文件的權限來查找文件 |
-size | 以文件大小查找 |
-path | 指定路徑樣式,配合-prune參數排除指定目錄 |
! | 表示取反 |
-a | 表示取交集 |
-o | 取並集 |
find命令的實踐操作
範例1: 查找指定時間內修改過的文件
[[email protected] /test]# find . -atime -1 <--> . 表示當前,查找2天內被訪問的文件
.
./file1.txt
./dir1
./dir1/sub1
./dir1/sub1/test
./file4.txt
./file5.txt
./dir2
./dir2/dir1
./dir2/dir1/sub1
./dir2/dir1/sub1/test
[[email protected] /test]# find /test/ -mtime -5 <-->使用絕對路徑,查找5天內被修改的文件
/test/
/test/file1.txt
/test/file2.txt
/test/file3.txt
/test/dir1
/test/dir1/sub1
/test/dir1/sub1/test
/test/dir3
/test/.file4.txt
/test/file4.txt
/test/file5.txt
/test/dir2
/test/dir2/dir1
/test/dir2/dir1/sub1
/test/dir2/dir1/sub1/test
範例2: 用
-name
指定關鍵字查找
[[email protected] /test]# find /var/log/ -mtime +5 -name ‘*.log‘ <-->在/var/log/目錄下查找5天以前.log結尾的文件
/var/log/anaconda/anaconda.log
/var/log/anaconda/X.log
/var/log/anaconda/program.log
/var/log/anaconda/packaging.log
/var/log/anaconda/storage.log
/var/log/anaconda/ifcfg.log
/var/log/anaconda/ks-script-klS0RP.log
/var/log/anaconda/journal.log
/var/log/vmware-network.8.log
/var/log/vmware-network.9.log
範例3: 利用
!
反向查找
[[email protected] /test]# find . -type d
.
./dir1
./dir1/sub1
./dir1/sub1/test
./dir3
./dir2
./dir2/dir1
./dir2/dir1/sub1
./dir2/dir1/sub1/test
[[email protected] /test]# find . ! -type d <-->! 表示取反,查找不是目錄的文件,註意感嘆號的位置
./file1.txt
./file2.txt
./file3.txt
./.file4.txt
./file4.txt
./file5.txt
範例4: 按照目錄或文件的權限來查找文件
[[email protected] /test]# find /test -perm 755 <-->755是權限的數字表示方式
/test
/test/dir1
/test/dir1/sub1
/test/dir1/sub1/test
/test/dir3
/test/dir2
/test/dir2/dir1
/test/dir2/dir1/sub1
/test/dir2/dir1/sub1/test
範例5: 按大小查找文件
[[email protected] /test]# find . -size +10c <-->查找當前目錄下大於10字節的文件
.
./dir1
./dir1/sub1
./dir2
./dir2/dir1
./dir2/dir1/sub1
範例6: 查找文件時希望忽略某個目錄
[[email protected] /test]# find /test -path "/test/dir1" -prune -o -print <-->排除指定目錄
/test
/test/file1.txt
/test/file2.txt
/test/file3.txt
/test/dir3
/test/.file4.txt
/test/file4.txt
/test/file5.txt
/test/dir2
/test/dir2/dir1
/test/dir2/dir1/sub1
/test/dir2/dir1/sub1/test
範例6: 忽略多個目錄(了解即可)
[[email protected] /test]# find /test \( -path /test/dir2 -o -path /test/dir3 \) -prune -o -print <-->註意括號的空格
/test
/test/file1.txt
/test/file2.txt
/test/file3.txt
/test/dir1
/test/dir1/sub1
/test/dir1/sub1/test
/test/.file4.txt
/test/file4.txt
/test/file5.txt
範例7:
ls -l
命令放在find
命令的-exec
選項中執行
[[email protected] /test]# find . -type f -exec ls -l {} \; <-->最後以分號作為結束標誌,考慮不同意義,所以要轉義加-rw-r--r-- 1 root root 0 Apr 6 08:26 ./file1.txt
-rw-r--r-- 1 root root 0 Apr 4 14:51 ./file2.txt
-rw-r--r-- 1 root root 0 Apr 4 14:51 ./file3.txt
-rw-r--r-- 1 root root 0 Apr 4 15:01 ./.file4.txt
-rw-r--r-- 1 root root 0 Apr 6 08:27 ./file4.txt
-rw-r--r-- 1 root root 0 Apr 6 08:39 ./file5.txt
範例8:
ls -l
命令放在find
命令的xargs
選項中執行
[[email protected] /test]# find . -type f |xargs ls -l <-->xargs是一個命令,後續會講
-rw-r--r-- 1 root root 0 Apr 6 08:26 ./file1.txt
-rw-r--r-- 1 root root 0 Apr 4 14:51 ./file2.txt
-rw-r--r-- 1 root root 0 Apr 4 14:51 ./file3.txt
-rw-r--r-- 1 root root 0 Apr 4 15:01 ./.file4.txt
-rw-r--r-- 1 root root 0 Apr 6 08:27 ./file4.txt
-rw-r--r-- 1 root root 0 Apr 6 08:39 ./file5.txt
範例9: 使用
xargs
執行mv
(移動文件或目錄)命令例子
[[email protected] /test]# ls
dir1 dir2 dir3 file1.txt file2.txt file3.txt file4.txt file5.txt
[[email protected] /test]# ls dir3
[[email protected] /test]# find . -name "*.txt"|xargs -i mv {} dir3/ <-->使用 -i 參數使得 { } 代表find查找到的文件
[[email protected] /test]# ls
dir1 dir2 dir3
[[email protected] /test]# ls dir3
file1.txt file2.txt file3.txt file4.txt file5.txt
今天就寫到這裏,有什麽疑問或出現什麽錯誤,隨時歡迎大神們發表評論指點迷津
Shell命令-文件及目錄操作之cp、find