最初のxファイルを移動する方法


21

数千の無秩序なファイルがあるこの巨大なフォルダーがあります。mvコマンドを使用して最初の5000をサブフォルダーに移動することは可能ですか?今のところ私はファイルを

 mv *some_pattern* ./subfolder1/

今のところ、画像を非常にランダムに移動していますが、各サブフォルダーに正確に5000個のファイルがない場合、それはそれほど重要ではありません。それを行うためのより良い方法はありますか?


回答:


23
mv `ls | head -500` ./subfolder1/

12
(ファイル名にスペース、タブ、改行、スター、開き角かっこ、疑問符文字が含まれていない-.、またはで始まり、subfolder1それ自体がそのリストに表示されないと仮定します。)
StéphaneChazelas

@StéphaneChazelasファイルにこれらが含まれている場合、コマンドをどのように変更しますか?
ペイティリー

$ sudo mv `ls | head -50000` 01/ sudo: unable to execute /bin/mv: Argument list too long
ブライアントーマス

15

zsh

mv -- *(D.oN[1,5000]) ./subfolder1

ディレクトリ内の順序で最大5000個の通常ファイルを移動します。

辞書順にソートされたリストの最初の5000の場合:

mv -- *(D.[1,5000]) ./subfolder1

引数リストに関するエラーが長すぎる場合。以下を発行することにより、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/

2
POSIXスニペットは逸品です
iruvar

bashを使用してエラーが発生した場合はどうなりますか?
ブライアントーマス

8

シンプルで、特殊な文字、スペースなどをサポートするバージョン

ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/

これが機能するためには、そのままでdir2存在している必要があり、あなたはの親ディレクトリからそれを実行する必要がありますdir1dir2

これにより、1000個のファイルがdir1からdir2に移動します。


良いですね!ls -Q -S dir1 | head -1000 | xargs -i mv dir1/{} dir2/ dir1で最大1000個のファイルを移動した場合(-Sはサイズでファイルをリストします)
oneklc

1
の予想される入力形式ls -Qと互換性のある出力を生成しないことに注意してくださいxargs。スペース文字を含むファイル名には役立ちますが、二重引用符やバックスラッシュ、およびTABなどの制御文字を含むファイル名の害には役立ちません。
ステファンシャゼラス

3

次のようなことが必要になる場合があります。

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バリアントで機能します。


1
( -または、提供ファイル名の提供どれもスペース、タブ、改行、星、開き角括弧、疑問符文字を含まないかで始まる。destination自身がそのリストには表示されません。)
ステファンChazelas

@StephaneChazelas本当。これは完全な解決策ではなく、単に問題を処理する方法です。
カールソン

3
  1. ファイルの移動元のディレクトリに移動します
  2. 以下のコマンドを実行

    find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/ 

ではfindコマンド、.(ドット)は、現在のディレクトリを表し、

Helloで始まりgzで終わるファイルを検索します。最初の5000ファイルがパスに移動されます /data01/path/


1

私はこのようにMVバッシュエラーなしで50,000の移動を成功させることができました

 ls | head -50000 | xargs -I{} sudo mv {} 01/

おもしろいことに、これはsamba共有上にあったので、50kの制限は、WindowsエクスプローラーGUIが一般にディレクトリ内の60kを超えるファイルを好まないためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.