
我有 291 個編號檔案(從 001 - 標題開始,到 291 - 標題結束)需要移到單獨的目錄中。 (001到021到資料夾1,022到053到資料夾2,它們每次的檔案數量不一定相同)。
我想我可以用這樣令人討厭的方式來做:ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
我幾乎肯定有更好的方法,那麼它會是什麼?
編輯:這樣就可以了,但我記得......
我沒有被困在使用終端,所以我使用文件管理器來單擊和拖動。但問題仍然存在。
答案1
既然你說並不總是 21 個文件,那麼你需要手動移動文件,為了有效地做到這一點,你可以使用大括號擴展:
mv filename{001..21} dir1
mv filename{022..53} dir2
...
答案2
這將按照您的描述移動文件(除了第二個 21 個文件的第二個範圍是 022 到 042)。
for ((i = 1; i <= 291; i++))
do
((d = (i - 1) / 21 + 1))
printf -v file 'filename%03d' "$i"
printf -v dir 'dirname%02d' "$d"
[[ -d "$d" ]] && mkdir "$d"
mv "$f" "$d"
done
答案3
我的意思是移動很多檔案(例如一萬或一百萬),如果你只使用{1..20},shell會抱怨檔案清單太長,所以
在桀騁,您可以加載MV內建:
setopt Extended_glob zmodload
zsh/文件
完成此操作後,您可以使用以下命令:
mv ./somefolder/{1..100000}.txt pathto/yourfolder/
或者如果你正在寫一些 shell 腳本,你可以這樣做:
for i in `seq $start $end`;
do mv "prefix${i}suffix.txt" pathto/yourfolder/
done
如果你沒有使用zsh,你可以參考https://unix.stackexchange.com/questions/128559/solving-mv-argument-list-too-long