CENTOS 7批量移動檔案
阿新 • • 發佈:2018-12-18
一 批量移動檔案命令:
參考
需求
將/home/ruxianliuying/Storage/下的七幅圖片批量移動到/usr/local/images/Storage/2018/05/17/目錄下。
移動指令
for i in `find /home/ruxianliuying/Storage/ -maxdepth 5 -name '*.JPG' ;`; do j=${i##*/} mv $i "/usr/local/images/Storage/2018/05/17/"$j;done;
二 命令說明:
- 框架:
for i in '範圍語句'; do <操作語句>; done;
- 範圍語句:以查詢結果作為範圍語句:
find /home/ruxianliuying/Storage/ -maxdepth 5 -name '*.JPG' ;
- 操作語句:
do j=${i##*/} mv $i "/usr/local/images/Storage/2018/05/17/"$j
。執行了兩件事:第一,給變數j賦值,j
獲取到的是i
去除掉dir之後的basename;第二,將作為basename的j
和目的路徑組合起來作為mv的目的位置,通過mv語句,以i
作為起始路徑,以組合路徑作為目的路徑,實現移動功能。 - basename的獲取:
j=${i##*/}
,表示擷取i
最後一個'/'
之後的內容。比如i
的值為/home/ruxianliuying/Storage/sa.JPG
,那麼j
sa.JPG
。
三 附Linux Shell操作符說明:
參考網址:
Shell中的${}、##
和%%
使用範例:
假設定義了一個變數為: file=/dir1/dir2/dir3/my.file.txt
可以用${ }
分別替換得到不同的值:
${file#*/}
:刪掉第一個/
及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}
:刪掉最後一個/
及其左邊的字串:my.file.txt
${file#*.}
:刪掉第一個.
及其左邊的字串:file.txt
${file##*.}
:刪掉最後一個.
及其左邊的字串:txt
${file%/*}
:刪掉最後一個/
/dir1/dir2/dir3
${file%%/*}
:刪掉第一個/
及其右邊的字串:(空值)
${file%.*}
:刪掉最後一個.
及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}
:刪掉第一個.
及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
#
是去掉左邊(鍵盤上#
在$
的左邊)%
是去掉右邊(鍵盤上%
在$
的右邊)- 單一符號是最小匹配;兩個符號是最大匹配
${file:0:5}
:提取最左邊的 5 個位元組:/dir1
${file:5:5}
:提取第 5 個位元組右邊的連續5個位元組:/dir2
也可以對變數值裡的字串作替換:
${file/dir/path}
:將第一個dir
替換為path
:/path1/dir2/dir3/my.file.txt
${file//dir/path}
:將全部dir
替換為path
:/path1/path2/path3/my.file.txt