一、場景描述
在終端窗口中,用shell
命令,批量拷貝文件到指定目錄。
我是在Windows
系統(tǒng)上,通過git bash
終端來執(zhí)行shell
命令的。
二、實現(xiàn)過程
命令1
for filepath in `find /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版/ -name *無答案*`; do cp $filepath /c/Users/admin/Desktop/高中數(shù)學/基礎版; done
結果:
于是把find
命令單獨拿出來執(zhí)行:
find /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版/ -name *無答案*
結果:
發(fā)現(xiàn)文件路徑和文件名存在空格。
查找解決辦法
復制時,如何處理帶空格的文件路徑或文件名。
查找結果:
使用單引號('')
或雙引號("")
包裹文件名字。
命令2
for filepath in `find /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版/ -name *無答案*`; do echo "\"$filepath\"" /c/Users/admin/Desktop/高中數(shù)學/基礎版; done
結果:
發(fā)現(xiàn),文件路徑還是被分割了。
而且,雙引號也成功添加到每個切割的部分上了。說明,語句修改對的,但是,沒達到預期效果。
這時候,我感覺,是在for
循環(huán)讀取find
結果集時,就已經切割了。
但是,find
命令查詢的結果是正常的,沒有切割。
繼續(xù)查找解決辦法for
循環(huán)處理帶空格的字符串。
查找結果∶
更改shell
分隔符即可
上圖代碼:
只需要更改 shell分隔符即可
在for循環(huán)之前修改IFS變量,示例:
OLDIFS="$IFS" #備份舊的IFS變量
IFS=$'\n' #修改分隔符為換行符
for i in `cat aaa` #aaa文件中存放著公鑰
do
echo "$i"
done
IFS="$OLDIFS" #還原IFS變量
于是,成功解決問題。文章來源:http://www.zghlxwxcb.cn/news/detail-815559.html
三、最終實現(xiàn)
admin@DESKTOP-0DH3J68 MINGW64 /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版
$ OLDIFS="$IFS"
admin@DESKTOP-0DH3J68 MINGW64 /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版
$ IFS=$'\n'
admin@DESKTOP-0DH3J68 MINGW64 /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版
$ for filepath in `find /d/LearningMaterials/數(shù)學/數(shù)學/高中/一數(shù)/偏基礎(基礎+中檔版)/基礎篇2.0電子版/ -name *無答案*`; do cp "$filepath" /c/Users/admin/Desktop/高中數(shù)學/基礎版; done
所以,命令1
的問題的本質在于shell
分隔符是空格
導致的。而不是文件名中帶有空格
導致的問題。因為,find
的結果是正常的。但是,經過for
循環(huán)之后,出了問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-815559.html
到了這里,關于Linux:使用for+find查找文件并cp到其他目錄,文件名帶有空格的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!