
番号付きファイルが 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
これにより、説明したとおりにファイルが移動されます (ただし、2 番目の 21 個のファイルの場合、2 番目の範囲は 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万や100万など)を移動する場合に、{1..20}だけを使用すると、シェルはファイルリストが長すぎると文句を言うということです。
で翻訳、ロードすることができます動画組み込み:
setopt 拡張グロブ zmodload
zsh/ファイル
その後、次のようなコマンドを使用できます。
mv ./somefolder/{1..100000}.txt pathto/yourfolder/
または、シェル スクリプトを書いている場合は、次のようにすることができます。
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