我正在嘗試使用bash腳本遞歸文件夾並在其上運行命令。有什麼建議麼?遞歸讀取文件夾並對其執行命令
回答
如果你想遞歸到目錄中,對這些文件中的每個文件執行命令,我會使用find
命令,而不是使用shell腳本寫任何東西。
該命令可以接收大量的參數,如type
的文件返回到過濾的類型,或exec
在每個結果執行命令。
例如,要查找目錄,是一個在我目前在:
find . -type d -exec echo "Hello, '{}'" \;
這將讓我somehthing像:
Hello, '.'
Hello, './.libs'
Hello, './include'
Hello, './autom4te.cache'
Hello, './build'
Hello, './modules'
同樣找到當前目錄下的文件:
find . -type f -exec echo "Hello, '{}'" \;
這將讓我這樣的事情:
Hello, './config.guess'
Hello, './config.sub'
Hello, './.libs/memcache_session.o'
Hello, './.libs/memcache_standard_hash.o'
Hello, './.libs/memcache_consistent_hash.o'
Hello, './.libs/memcache.so'
Hello, './.libs/memcache.lai'
Hello, './.libs/memcache.o'
Hello, './.libs/memcache_queue.o'
Hello, './install-sh'
Hello, './config.h.in'
Hello, './php_memcache.h'
...
有人會說,「這不是空殼」 ......但是,爲什麼重新發明輪子呢?
(並且,在某種程度上,它是殼^^)
欲瞭解更多信息,你可以看看:
man find
- 很多的教程找到與谷歌,例如,如Unix Find Command Tutorial
如果您需要重命名目錄以及文件遞歸檢查出這個答案:http://stackoverflow.com/questions/ 4268591/unix-rename-files-directories-to-uppercase – JJones 2013-12-11 08:59:42
謝謝。我怎麼會調整這隻看我的當前目錄的子目錄,而不是尋找子目錄 – 2017-10-18 09:51:04
啊。像這樣:'找。 -maxdepth 1 -type d -exec echo「Hello,'{}'」\;' – 2017-10-18 09:52:37
看一看的find
命令,檢查開關-type
(使用d指定目錄)和-exec
(指定要執行的命令)。
對不起,我不明白你在問什麼。我可以用你的問題想最好的是
find -type d -exec scriptname.sh \{\} \;
在這種情況下,腳本會在每個目錄內執行嗎? – Sigur 2016-11-26 13:37:48
不,腳本在'find'的位置執行。 – 2016-12-09 13:08:43
對於大多數遞歸文件操作,要使用find
,作爲其他的答案解釋。
bash-doc包中包含一個遞歸bash腳本示例。如果你已經安裝了這些示例,它將在/usr/share/doc/bash/examples/functions/recurse
(在Debian上)。
像這樣的東西應該實現自己的目標:
function RecurseDirs
{
oldIFS=$IFS
IFS=$'\n'
for f in "[email protected]"
do
-----your activity here-----
if [[ -d "${f}" ]]; then
cd "${f}"
RecurseDirs $(ls -1 ".")
cd ..
fi
done
IFS=$oldIFS
}
[請勿解析'ls'](http://mywiki.wooledge.org/ParsingLs),請! – 2015-10-27 17:30:02
一些基本的殼錯過命令,如「查找」和他們的一些命令不支持遞歸性。 在這種情況下,你可以使用這個腳本在樹中的所有子目錄運行所需的命令:
CDIR=$(pwd)
for i in $(ls -R | grep :); do
DIR=${i%:} # Strip ':'
cd $DIR
$1 # Your command
cd $CDIR
done
如果命名上面的「recurse.sh」,然後使用:
./recurse.sh <command>
例(所有者/組更改爲樹中的所有文件的「根」):介紹了globstar選項
./recurse.sh "chown 0:0 *"
[不要分析'ls'](http://mywiki.wooledge.org/ParsingLs),請! – 2015-10-27 17:29:37
猛砸4.0,這樣一個結構,如:
for f in mydir/**/*
do
# operations here
done
...將在$ f的任何土地上遞歸地行動。打開「shop-globstar」,否則**將被視爲單數*。
今天發現這個寶石在http://www.linuxjournal.com/content/globstar-new-bash-globbing-option,受到zsh構造(我已默認啓用)的啓發。
- 1. 監視文件夾並執行命令
- 2. Linux命令行刪除文件遞歸其不在其它文件夾
- 3. 逐行讀取並執行if命令
- 4. 遞歸讀取目錄與文件夾
- 5. 執行讀取命令
- 6. 如何從文件中讀取命令並在c中執行這些命令?
- 7. awk:如何執行命令並讀取其輸出
- 8. 從子線程執行外部命令(並讀取其輸出)
- 9. 執行shell命令並在C程序中讀取其輸出
- 10. Linux命令對特定文件夾中的新文件「執行」?
- 11. 以遞歸方式在文件上執行Maven命令
- 12. 命令行循環遍歷所有文件夾並執行命令
- 13. perl遞歸文件讀取
- 14. 嘗試從ftp遞歸下載特定文件並在其上運行命令
- 15. 使用windows批處理文件讀取文件內容並執行命令
- 16. 執行tcpstat命令並同時對其輸出執行
- 17. 遞歸改變目錄,並在每個執行一個命令
- 18. 爲文件夾中的所有文件遞歸運行終端命令
- 19. C++:從命令行讀取文件名並將其用於我的文件
- 20. shell腳本:找到git文件夾並執行git命令?
- 21. 從命令行讀取文本文件
- 22. 閱讀Python遞歸文件夾
- 23. 讀取整數。在命令行文件(TXT),並偶奇文件
- 24. unix命令通過傳遞行號從文件中讀取行
- 25. 遞歸文件夾
- 26. 從文本文件中讀取計算機名稱並執行命令
- 27. 將文件作爲命令行參數傳遞並讀取它的行
- 28. 閱讀用戶命令並執行它
- 29. Scp命令無需遞歸複製特定文件夾
- 30. 創建Bat文件對文件夾中的所有文件執行命令
問題不明。你只是想使用find來對給定目錄下的所有文件執行命令嗎? – 2009-08-26 10:48:23
答案是在我的投票然後:) – drAlberT 2009-08-26 10:48:53
我只是想重命名目錄下的所有文件 – Jinhua 2009-08-27 01:53:05