2013-02-26 48 views
1

我執行ls-R /files/解析LS-R輸出到Unix的一個變量

我得到了以下輸出

./: nvision 
./nvision: layout 
./nvision/layout: abcd.txt 

我找得到路在上市就像

/nvision 
/nvision/layout/ 
/nvision/layout/abcd.txt 

,我應該能夠將所需路徑複製到變量

ps:我不是尋找NVISION 我想獲得的文件夾和文件的列表files文件夾

下任何一個可以幫助我與

+1

那你試試? – m0skit0 2013-02-26 11:06:12

+0

ls -lR我試過了,但我沒有得到我想要的東西 – gmhk 2013-02-26 11:09:27

+3

使用'find','ls'基本上從來不會用在腳本中,它的輸出是爲人類設計的。 – Mat 2013-02-26 11:11:02

回答

4

您是否嘗試過使用find(see reference)

會就像find .一樣簡單,即可獲取當前目錄中的文件和文件夾列表。更改任何路徑獲得的文件和目錄此路徑下的列表:

nvision 
nvision/abcd.txt 
nvision/layout 

將其保存到一個變量

var=`find .` 

而且初始斜線添加到每一行(如果需要)

var=`find . -exec echo /{} \;` 

這裏var沒有特別的意義,它只是變量名。

要稍後使用該變量,您可以使用$var${var}。例如,要打印它或將其保存到文件中:

# Print the variable content 
echo $var 

# Save the content of var to a file 
echo $var > /tmp/file.txt 
+0

如果你有GNU find可用,你可以使用'-printf'而不是'-exec echo'。這節省了爲每個找到的文件啓動一個進程。 – 2013-02-26 12:43:19

+0

我得到的那個find.exe沒有正確配置,它正在挑選Windows find.exe,它現在失敗了查找命令是完全沒有問題的 – gmhk 2013-02-26 14:09:04

2

您應該真的使用find來查找這些類型的東西。只需使用find directory即可。如果您需要更具體的輸出格式,您可以使用find-printf選項。 Find是一個非常強大的工具,它還允許進行各種過濾。請務必查看文檔以獲取更多信息:GNU FindUtils

存儲結果的變量使用下面的語句之一:

result=`find ...` 

result=$(find ...) 

您還可以使用找到直接執行命令使用find的每場比賽-exec選項。再次確保查看文檔。它非常全面。

更新(蘋果/ UNIX用戶 - Linux用戶不受影響)

BSD find需要的路徑。使用

find . 

,而不是僅僅

find 

如果您需要在您的工作目錄中的所有文件的列表。

1

很好的答案是遍佈其中列出找到的所有文件喲可以定義

哪裏這個頁面,你應該使用的發現。是當前文件夾,否則替換。與路徑你希望搜索

find .-type d -print 

只列出目錄,或者找到

find . -type f -print 

,如果你正在尋找既然後

將列出所有文件只

find . -print 

,如果你只是想定義遞歸級別嘗試

find . -maxdepth 1 -print 

,這裏是一個腳本

#!/bin/bash 
for names in $(find . -type f -print); do 
    echo $names 
done