,我發現這個bash腳本,工程巨大移動X個文件到其他目錄
for file in $(ls -p | grep -v/| tail -241)
do
mv $file ../01
done
我的bash foo是弱的,基本上如果我的目錄裏面運行將在最後一個241個文件移動到的文件夾/ 01
問題是腳本本身必須在所有文件的目錄中,而且我的當前掛載沒有執行權限。我想要做的是從外部文件夾執行此腳本,例如我的工作目錄/ home/user/
我的當前根目錄位於不同的驅動器/分區上,而不是我想要腳本執行的所有文件上。
for file in **/media/storage1/allfiles** $(ls -p | grep -v/| tail -241)
do
mv $file ../01 <this should remain local to /media/storage/
done
**編輯** 我得到這個由環 cd the/directory/I/want/to/be/in
前加入這個工作:
例如
cd /media/storage1/allfiles
for file in $(ls -p | grep -v/| tail -241)
do
mv $file ../01
done
更好的問題是:這是正確的方式來做到這一點,還是有正確的方法?
在'for'循環中使用'ls'輸出是不可取的 - 如果你的文件有特殊字符如空格或'*',它將會中斷。否則,你的邏輯聽起來很合理。 – codeforester
這是一個非常明智的方法,儘管你應該考慮爲源目錄名稱和目標目錄名稱(以及要移動的文件數量)使用命令行參數 - 除非所有內容都真正修復。除此之外,如果您不必冒險搞亂製作目錄,測試會變得更容易,因爲您可以在命令行上指定名稱。除文件名(標籤,換行符)外沒有空白或其他恐怖故事......另外,GNU'mv'有一個選項'-t directory',可以用來減少調用'mv'的次數。 –
就像'mv f1 f2 f2 ../ 01'可以正常工作。 '-t'選項的好處是當'mv'使用類似'find -exec mv -t dir {} +'的命令時,其中文件列表必須是最後一個。 – chepner