這篇文章介紹一下tar命令的兩個引數在使用中的小技巧。
以docker目前最新的乙個穩定版本的壓縮tgz檔案為例,壓縮檔案展開會有乙個docker目錄,如果希望這個tgz檔案直接展開到乙個已經存在的名為docker的目錄下(比如/tmp/docker),一般的做法是tar xf展開後再使用mv操作,執行的時候就會發現乙個很有趣的事情,就是docker目錄下有乙個docker的檔案,然後在docker的目錄下試圖將這個docker的檔案移動至此檔案的父目錄中,會發生什麼情況,可自行試一下就會知道。上述的說明表明了一件事情,就是非常簡單的事情也很難說明白,接下來直接使用**進行說明:
[root@liumiaocn tmp]
# ls docker-19.03.5.tgz
docker-19.03.5.tgz
[root@liumiaocn tmp]
# tar tvf docker-19.03.5.tgz
drwxrwxr-x ubuntu/ubuntu 0 2019-11-13 02:30 docker/
-rwxr-xr-x ubuntu/ubuntu 764144 2019-11-13 02:30 docker/docker-init
-rwxr-xr-x ubuntu/ubuntu 65641786 2019-11-13 02:30 docker/docker
-rwxr-xr-x ubuntu/ubuntu 72090824 2019-11-13 02:30 docker/dockerd
-rwxr-xr-x ubuntu/ubuntu 8649792 2019-11-13 02:30 docker/runc
-rwxr-xr-x ubuntu/ubuntu 18850136 2019-11-13 02:30 docker/ctr
-rwxr-xr-x ubuntu/ubuntu 2877369 2019-11-13 02:30 docker/docker-proxy
-rwxr-xr-x ubuntu/ubuntu 34625816 2019-11-13 02:30 docker/containerd
-rwxr-xr-x ubuntu/ubuntu 6116160 2019-11-13 02:30 docker/containerd-shim
[root@liumiaocn tmp]
# [root@liumiaocn tmp]
# mkdir docker
[root@liumiaocn tmp]
# ls docker
[root@liumiaocn tmp]
#
問題就是/tmp/docker這個目錄已經存在,展開到到這個目錄下,預設方式下會有docker的目錄,如果不希望有這層多餘的目錄,可執行檔案直接在/tmp/docker下,如果不使用tar命令的特定選項-c和strip-components的話就只能這樣。
[root@liumiaocn tmp]# cd docker
[root@liumiaocn docker]# tar xf ../docker-19.03.5.tgz
[root@liumiaocn docker]# ls
docker
[root@liumiaocn docker]# ls docker/
containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc
[root@liumiaocn docker]#
[root@liumiaocn docker]# mv docker/* .
mv: overwrite 『./docker』? y
mv: cannot overwrite directory 『./docker』 with non-directory
[root@liumiaocn docker]# ls
containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc
[root@liumiaocn docker]# ls docker
docker
[root@liumiaocn docker]#
然後發現目錄和檔案同名,刪除一層就很麻煩了,可以這樣做
[root@liumiaocn docker]# mv docker/docker docker/dockertmp
[root@liumiaocn docker]# mv docker/dockertmp .
[root@liumiaocn docker]# rm -r docker
rm: remove directory 『docker』? y
[root@liumiaocn docker]# mv dockertmp docker
[root@liumiaocn docker]# ls
containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc
[root@liumiaocn docker]#
替代命令:tar xzvf docker-19.03.5.tgz -c /tmp/docker --strip-components=1
[root@liumiaocn tmp]# ls docker-19.03.5.tgz
docker-19.03.5.tgz
[root@liumiaocn tmp]# ls docker
[root@liumiaocn tmp]# tar xzvf docker-19.03.5.tgz -c /tmp/docker --strip-components=1
docker/docker-init
docker/docker
docker/dockerd
docker/runc
docker/ctr
docker/docker-proxy
docker/containerd
docker/containerd-shim
[root@liumiaocn tmp]# ls docker
containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc
[root@liumiaocn tmp]#
linux基礎命令 tar
1 命令格式 tar 必要引數 選擇引數 檔案 2 命令功能 用來壓縮和解壓檔案。tar本身不具有壓縮功能。他是呼叫壓縮功能實現的 3 命令引數 必要引數有如下 a 新增壓縮檔案到已存在的壓縮 b 設定區塊大小 c 建立新的壓縮檔案 d 記錄檔案的差別 r 新增檔案到已經壓縮的檔案 u 新增改變了和...
tar常用命令選項
tar命令 1.作用 tar命令是unix linux系統中備份檔案的可靠方法,幾乎可以工作於任何環境中,它的使用許可權是所有使用者。2.格式 tar 主選項 輔選項 檔案或目錄 3.主要引數 使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。3.1 主選項 ...
Linux基礎命令實操
來個操作嚇嚇你 提問 這是個啥,這個鍵盤是幹啥的 是vi vim的快捷鍵 vi是用來操作和編輯檔案的,又因為linux是萬事萬物皆檔案,所以可見這個操作重要性 vim是vi的加強版,也同樣重要 想要操作乙個檔案首先要開啟它,在linux系統中開啟終端,輸入如下 vim 檔名.副檔名這句話的意思就是如...