linux命令:批量將查找到的文件移動或者復制到其他目錄並盡可能保持原文件的目錄結構


期望:不寫shell文件,直接在命令行下即可執行的。
 
以例子說明
原文件:

 

移動目標:
 
步驟:
1.查找出滿足條件的文件,並先創建目標目錄
find  /root/ -maxdepth 5  -name '*.log' -exec echo {} \;|sed "s/ \/root\// \/root\/mv2\//g"|sed "s/[^/]*\.log//"|awk '{system("mkdir -p "$1" ")}'
 
2.查找出滿足條件的文件,並移動文件至目標目錄
find  /root/ -maxdepth 5  -name '*.log' -exec echo {} {} \; |sed "s/  \/root\//  \/root\/mv2\//g"|awk '{system("mv "$1" "$2)}'
 
命令說明:功能將root目錄下面的所有.log文件移動到mv2子目錄中。
a.查找時一定要用絕對路徑,否則mv和mkdir命令會出錯
b.第2步中:sed替換符里有空格的
c.以上說的是移動,復制的話只要將mv改為cp即可
============================================================
同事提供的更好的方法:
for i in `find  /tmp/ -maxdepth 5  -name '*.log' ;`; do j=${i%/*} ; mkdir -p  ${j/tmp/tmp\/mv2}; mv $i ${j/tmp/tmp\/mv2};done
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM