我想要做的東西線:是否有內聯bash腳本這樣的事情?
find -name *.mk | xargs "for i in [email protected] do mv i i.aside end"
我認識到,有可能比在此錯誤的更多,但我想具體瞭解這種內嵌命令定義的,我可以將xargs傳遞給。
我想要做的東西線:是否有內聯bash腳本這樣的事情?
find -name *.mk | xargs "for i in [email protected] do mv i i.aside end"
我認識到,有可能比在此錯誤的更多,但我想具體瞭解這種內嵌命令定義的,我可以將xargs傳遞給。
沒有必要在這裏xargs的
find -name *.mk -exec mv {} {}.aside \;
問:「我該如何做X?」。答:「你不需要做X」 –
我不知道你的for循環的語義應該是什麼樣的,但一味地編碼它會給這樣的:
find -name *.mk | while read file
do
for i in $file; do mv $i $i.aside; done
done
如果身體在多個地方使用,您還可以使用bash功能。
在某些版本找到一個論點需要。當前目錄
星*必須進行轉義
你可以用echo命令儘量肯定會做什麼命令
find . -name '*.mk' -print0 | xargs -0i sh -c "echo mv '{}' '{}.aside'"
man xargs
/-i
man sh
/-c
我敢肯定,你可以在一個不錯的方式做到這一點,但因爲你要求xargs的:
find -name "*.tk" | xargs -I% mv % %.aside
循環執行的文件名是沒有意義的,因爲你只能重新命名一次一個。使用內聯uglyness是沒有必要的,但我不能使它與管道,要麼eval
或bash -c
工作。
這個特殊的命令是不是一個很好的例子,但您可以通過給sh -c 'here is the script'
作爲一個命令使用「內聯shell腳本」。你可以給它的參數,這將是$ @裏面的腳本,但有一個問題:第一個參數here is the script
去$ 0腳本中之後,所以你必須把附加字有,否則你會失去的第一個參數。
find . -name '*.mk' -exec sh -c 'for i; do mv "$i" "$i.aside"; done' fnord '{}' +
另一個有趣的功能,我趁着還有一個事實,即循環遍歷命令行參數默認爲:for i; do ...
相當於for i in "[email protected]"; do ...
我重申,上面的命令是令人費解和慢相比,到許多其他做批量MV的方法。我發佈它只是爲了顯示一些很酷的語法。
所以你要簡單地重命名所有的* .mk文件或其他什麼東西? – lynxlynxlynx
你是什麼操作系統?至少Linux知道'rename'命令,查看http://linux.die.net/man/1/rename –
你應該記住'find'和'xargs'確實與bash無關,它們是獨立的程式。他們不知道(或關心)bash命令。 – cdarke