期望:不寫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