忽略的可能性,文件名包含換行符,您可以使用sed
爲pringley表明他answer,或者你可以創建一個while
循環與read
命令:
find . |
while read -r line
do
echo "$line$line"
done
(該-r
是「生'輸入;它停止在輸入中擴展反斜槓轉義序列的外殼,並且是外殼中的read
命令的標準POSIX特徵。)
由於您提到bash
,所以yo u能避免在文件名中的換行符問題通過使用find . -print0
選項終止一個空字節('\0'
在C)每個名稱,而不是一個換行符,然後使用:
find . -print0 |
while read -r -d '' line
do
echo "X${line}${line}X"
done
的-d ''
替換正常的換行符定界符與字符串參數的第一個字符,但字符串是空的,所以第一個字符是唯一的字符是空字節。
沒有一個簡單的方法(也沒有,據我所知,硬路)使用的線沿線的一個for
循環:
for line in $(find .)
do
echo "X${line}${line}X"
done
與空間工作可靠的名稱,或換行符。
通常,您可能需要使用xargs
命令。這讀取標準輸入並使用從標準輸入讀取的內容作爲命令的參數創建命令行。
find . | xargs wc -l
或者,用換行和空間安全(默認情況下,xargs
在空格,製表符和換行符分割參數):
find . -type f -print0 | xargs -0 wc -l
有很多的選項,你可以申請xargs
- 尤其是GNU版本。
但是,你也有選項find
在很大程度上使xargs
冗餘:
find . -type f -exec wc -l {} +
基本上做相同的工作作爲find . -print0 | xargs -0 wc -l
命令。一個區別是,如果find
的輸出中沒有文件,那麼使用-exec
完全不會執行wc
,而默認情況下,xargs
將執行一次(沒有文件名參數;用於POSIX合規性)。使用GNU xargs
,您可以使用-r
或--no-run-if-empty
來停止這種情況。無論如何,Mac OS X xargs
似乎都這樣做。
考慮'find。 | xargs -I {} printf「%s之間%s \ n」{} {}',試試吧,它會打印什麼? –
如果你沒有在'{}'和'{}'之間留出空格,我希望它能打印出「./file./file」。如果*有*空格,我期望「./file」./file「 –
我看,這是正確的,我不知道大括號在那裏。 –