移動一系列編號的檔案?

移動一系列編號的檔案?

我有 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

相關內容