2013-07-29 98 views
1

我有一個命令:(BASH)如何刪除默認的「換行」操作員命令

find /etc -type f \(! -perm /o=w \) -exec /usr/bin/ls -hastl '{}' \; -exec /usr/bin/md5sum '{}' \; > somefile.log 

和該命令將創建這樣的打印(我需要有沒有斷裂線):

... 
4.0K -rw-r--r--. 1 root root 332 Oct 23 2012 /etc/xinetd.d/rsync 
fd32314f3157aaf15712e6da7758060d /etc/xinetd.d/rsync 
.... 

問題:什麼我必須添加到這個命令刪除新行操作來獲得這樣的結果:

(...) is '-rw-r--r--. 1 root root 332 Oct 23 2012' 

... 
4.0K (...) /etc/xinetd.d/rsync >> fd32314f3157aaf15712e6da7758060d /etc/xinetd.d/rsync 
... 
+2

的問題不明確 –

回答

0

恕我直言,你只能用exec執行一個命令。一個可能的解決方案可能是在執行「SH -c」所以你可以使用管道和類似:

,並在最後一個換行符:

find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec /usr/bin/md5sum '{}' \; 

沒有任何換行符:

find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec sh -c "/usr/bin/md5sum '{}'| tr -d '\n' " \; 
+0

很不錯,老兄!謝謝你的建議! – user2424174

+0

但我正在獲得行:4.0K -rw-r - r--。 1 root root 451 5月17日15:17 /etc/httpd/conf.modules.d/01-cgi.conf 36e54d4b2bd190f5cbad876bfbeda461 /etc/httpd/conf.modules.d/01-cgi.conf - 如何刪除重複的文件路徑? – user2424174

+0

'find/etc -type f -exec sh -c「/ bin/ls -hastl'{}'| tr'\ n'''」\; -exec sh -c「/ usr/bin/md5sum'{}'| cut -d''-f 1」\;' – marderh

1

怎麼樣一個命令,如

echo "$(ls -hastl '{}') >> $(md5sum '{}')" 
1

兩個加入每一對相鄰的線路,只需將您的輸出連接到awk 'NR%2{line=$0;next}{print line sep $0}' sep=" >> "即可根據需要調整sep

附錄:

針對原作者的評論,我要解釋這個解決方案的一些細節:

awk過程輸入記錄的角度來看,沒有進一步的選擇就是線逐線。 (內部)變量NR存儲當前記錄的編號。 %是模數運算符,所以NR%2對於奇數行號碼求值爲1,對於偶數行號碼求值爲0{...}組命令(所謂的'動作')執行。由於1被認爲是「真」,並且0「假」,所以只對奇數行號執行第一個動作。此操作包含兩條命令:首先,整行($0)存儲在變量line中,然後處理next記錄(不考慮任何其他操作)。對於偶數行,不執行此操作,因此需要考慮第二個操作。由於在{之前沒有表達式,所以執行動作:所存儲的(即先前的)line與稱爲sep的變量和當前行($0)連接。結果字符串被打印出來(並且最後自動附加一個新行)。 sep的值作爲參數傳遞給awk,以便輕鬆調整它而不會混淆腳本。由於awk讀取標準的輸入和輸出,無需進一步論證你可以管(|)你發現的輸出awkfind ... -exec ... -exec ... | awk ... > ...

+0

看起來不錯,但我不知道如何使用awk,但是我會嘗試學習 – user2424174

+0

@ user2424174我添加了一些解釋來幫助你理解我的答案並鼓勵你學習awk。 ;-) – mschilli

+0

謝謝!它非常有幫助 – user2424174