1. 程式人生 > >Shell命令-文件及目錄操作之cp、find

Shell命令-文件及目錄操作之cp、find

exp style 評論 移動 oldboyedu type left tin fig

文件及目錄操作 - cp、find

1、cp:復制文件或目錄

cp命令的功能說明

cp命令用於復制文件或目錄。

cp命令的語法格式

cp [OPTION]... SOURCE... DIRECTORY
cp [參數選項] [源文件或源目錄] [目標文件或目錄]

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