2015-04-03 63 views
0

在bash中如何在同一個點上打印信息?在同一點上打印信息

例如,如果我想要遍歷假想根的所有子目錄中的所有文件,並且希望在終端上打印所有信息始終在同一位置而不打印新行?

DIR例子

--> root 
    --> Dir 1 
    --> File 1 
    --> File 2 
    --> Dir 2 
    --> File 3 
    --> File 4 

外殼輸出必須是這樣一件事:

Infos before that I don't want to clear 

------------------------------- 
Directory : dirName 
File count : x 
File   : fileName 
------------------------------- 

「計數」將保持不變,在符合當前的目錄,但其它信息必須改變按照當前的循環子目錄(元素)

在此先感謝

+2

如何在每次迭代中做一個「清晰」並打印整個事物呢? – 2015-04-03 16:27:06

+1

如果這不是一個選項,那麼您可以在每次打印前使用終端代碼來爲您的終端定位光標。 – 2015-04-03 16:29:30

+0

重複:http://unix.stackexchange.com/q/194233/4667 – 2015-04-03 16:45:01

回答

1

請看下面的例子:

for file in * 
do 
    printf "\r%${COLUMNS}s\r%s" "" "$file" 
    sleep 1 
done 
echo 

這將打印的所有文件在同一線路上的當前目錄,睡了每個文件名後一秒。

在此示例中,printf用於打印具有與終端的列對應的字段寬度的空參數。這是爲了在打印每個新的$file之前清除以前的任何輸出。

+0

你不認爲使用文件作爲變量是一個不好的選擇嗎?文件本身是一個返回文件信息的命令。 – Jahid 2015-04-04 08:19:42

+0

@Jahid:在Bash中這不是一個問題,因爲賦值和變量的使用在語法上是明確的('file = value','$ file')。而且,與其他語言相比,實際上每個名稱都可以作爲命令存在。我怎麼知道有在某個系統上沒有'myfile'或'f'命令(記住命令可以是內置的,別名,函數或者外部程序)? – 2015-04-04 08:59:13