2016-07-28 67 views
1

我試圖列出目錄中的文件結構以保存系統中結構的快照。我試圖找到它,因爲它是快速和本地的Linux。查找命令返回文件結構兩次?

我想:

find $PWD * -ls 

但不知何故,該文件結構被退回兩次,這樣的:

8022 1 drwxr-x--- 2 user1  my-group  3 Jun 28 23:15 /home/user1/projects/wrapper 
    8158 10 -rw-r----- 1 user1  my-group  160 Jun 28 23:15 /home/user1/projects/wrapper/wrapper.sh 
    41 1 drwxr-x--- 3 user1  my-group  3 Jun 28 13:17 /home/user1/projects/WGS 
    42 1 drwxr-x--- 2 user1  my-group  3 Jun 28 13:18 /home/user1/projects/WGS/test 
    41 1 drwxr-x--- 3 user1  my-group  3 Jun 28 13:17 WGS 
    42 1 drwxr-x--- 2 user1  my-group  3 Jun 28 13:18 WGS/test 
    8022 1 drwxr-x--- 2 user1  my-group  3 Jun 28 23:15 wrapper 
    8158 10 -rw-r----- 1 user1  my-group  160 Jun 28 23:15 wrapper/wrapper.sh 

爲什麼的行爲找到這樣?有沒有辦法只打印一次?理想情況下,我寧願保留完整路徑。

如果有更好的工具來存檔文件結構,請隨時讓我知道!

謝謝!

編輯:

我明白了爲什麼我得到的結果得益於Rhymoid和John1024。

我想知道有沒有人知道前兩列中的數字是什麼意思?

+2

'find $ PWD * -ls' shell擴展爲'find/home/user1/projects',後跟當前目錄中的所有文件名('wrapper WGS'),後跟'-ls'。你實際上在問'find'來做到這一點。相反,你可能想'找到。 -ls'。 – 2016-07-28 21:39:03

+1

或者,保留完整路徑,找到$ PWD「-ls」(無星號) – John1024

+0

@Rhymoid謝​​謝!找到$ PWD -ls的作品!你可以讓它成爲答案,我會接受它。 – olala

回答

2

find工作得很好。它確實如你所說應該做的。

從輸出中,我推斷/home/user1/projects是您當前的目錄,其中只包含文件WGSwrapper(兩個目錄)。當你在shell通過你的命令

find $PWD * -ls 

,它擴展(使用可笑複雜的系統,大部分是standardised as part of POSIX)真正執行前。在這種情況下,

  • find被擴展爲find
  • $PWD被擴展爲/home/user1/projects;即環境變量PWD(工作目錄的路徑)的值,
  • 單詞*擴展爲WGS wrapper由於pathname expansion;
  • word -ls擴展爲-ls

得到的命令是

find /home/user1/projects WGS wrapper -ls 

這的確打印在當前目錄下的所有文件及其後代的兩倍。


你可能想要的是

find . -ls 

單詞擴展不改變這種命令,find解釋.作爲當前工作目錄。另外,如果你想保留的完整路徑,你想

find "$PWD" -ls 

單詞擴展不會改變這個命令,而是圍繞$PWD雙引號保證,如果擴張介紹空格,則仍將保留一個參數。