web-dev-qa-db-ja.com

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

何千もの順序付けされていないファイルを含むこの巨大なフォルダがあります。最初の5000をmvコマンドを使用してサブフォルダーに移動することは可能ですか?今のところ、

 mv *some_pattern* ./subfolder1/

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

22
Fabinout
mv `ls | head -500` ./subfolder1/
28
schaiba

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/
16

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

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

これがそのまま機能するためには、dir2が存在する必要があり、dir1およびdir2の親ディレクトリから実行する必要があります。

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

8

あなたはこのようなことをする必要があるかもしれません:

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

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

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

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

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

3
Pratik Hiremath

非常に大きなディレクトリでも機能するバージョン:50万を含むディレクトリから1000ファイルを移動:

ls -U . | head -1000 | xargs mv -t 01/

({}を使用した構文では、すべてのファイルに新しいmvが生成されますが、これはそうではありません)

1
Honza

私はこのようなmv bashエラーなしで50,000の移動を成功させることができました

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

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

1
Brian Thomas