何千もの順序付けされていないファイルを含むこの巨大なフォルダがあります。最初の5000をmv
コマンドを使用してサブフォルダーに移動することは可能ですか?今のところ、
mv *some_pattern* ./subfolder1/
今のところ、私は画像をかなりランダムに移動しています。各サブフォルダーに正確に5000個のファイルがなくても、それほど重要ではありません。それを行うより良い方法はありますか?
mv `ls | head -500` ./subfolder1/
zsh
の場合:
mv -- *(D.oN[1,5000]) ./subfolder1
ディレクトリにある順に最大5000個の通常ファイルを移動します。
辞書式にソートされたリストの最初の5000の場合:
mv -- *(D.[1,5000]) ./subfolder1
arg list too longに関するエラーが発生した場合。次のコマンドを発行して、zsh
のbuitin mv
コマンドを使用できます。
zmodload zsh/files
最初。
POSIXly:
set --
for f in .* *; do
[ "$#" -lt 5000 ] || break
[ -f "$f" ] || continue
[ -L "$f" ] && continue
set -- "$@" "$f"
done
mv -- "$@" subfolder1/
シンプルで、特殊文字、スペースなどをサポートするバージョン。
ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/
これがそのまま機能するためには、dir2
が存在する必要があり、dir1
およびdir2
の親ディレクトリから実行する必要があります。
これにより、1000個のファイルがdir1からdir2に移動します。
あなたはこのようなことをする必要があるかもしれません:
x=1
for file in *
do
if [ "X$x" = "X#####" ]; then
break
fi
mv $file <destination>
x=`expr $x + 1`
done
このスクリプトは、bash、ksh、sh、および複数のUNIXバリアントで機能します。
コマンドの下で実行
find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/
find
コマンドでは、.
(ドット)は現在のディレクトリを示します
helloで始まりgzで終わるファイルを検索します。最初の5000ファイルはパス/data01/path/
に移動されます
非常に大きなディレクトリでも機能するバージョン:50万を含むディレクトリから1000ファイルを移動:
ls -U . | head -1000 | xargs mv -t 01/
({}を使用した構文では、すべてのファイルに新しいmvが生成されますが、これはそうではありません)
私はこのようなmv bashエラーなしで50,000の移動を成功させることができました
ls | head -50000 | xargs -I{} Sudo mv {} 01/
おかしなことに、これはsamba共有上にあったので、WindowsエクスプローラーのGUIは一般的に、ディレクトリ内の60kを超えるファイルを好きではないため、50kの制限があります。