何千ものファイルを含むディレクトリがあります。 100個のファイル(どのファイルでも可能)を別の場所に移動するにはどうすればよいですか?
答え1
for file in $(ls -p | grep -v / | tail -100)
do
mv $file /other/location
done
ファイル名には、スペース、改行(デフォルトと仮定$IFS
)、ワイルドカード(?
、、、)、またはで始まる文字が含まれていないと想定されます。*
[
-
答え2
zshで最も簡単です:
mv -- *([1,100]) /other/location/
これにより、隠されていない最初の100個のファイル(すべての種類の場合は次のように変更されます)が移動されます([1,100])
。(.[1,100])
定期的なファイルのみまたは(^/[1,100])
以下を除くすべてのタイプ目次) 名前に基づいてアルファベット順にソートされます。以下を使用して別のソート順序を選択できます。o
グローバル予選たとえば、最も古いファイルを100個移動します。
mv -- *(Om[1,100]) /other/location/
他のシェルの場合は、ループでこれを実行して早く終了できます。
i=0
for x in *; do
if [ "$i" = 100 ]; then break; fi
mv -- "$x" /other/location/
i=$((i+1))
done
別のポータブル方法はファイルリストを作成し、最後の100を除いてすべて削除します。。
答え3
次は私のために働いた。以前に投稿した場合は申し訳ありません。クイックスキャンで見ることができませんでした。
ls path/to/dir/containing/files/* | head -100 | xargs -I{} cp {} /Path/to/new/dir
答え4
100個をランダムに移動します。
shuf -n 100 -e * | xargs -i mv {} path-to-new-folder
すべてのファイル名には引用符やバックスラッシュが含まれていないか、スペースで始まらないと想定されます-
。mv
stdinは現在パイプなので、ユーザー確認のためにエクスポートできるすべてのプロンプトは効果がありません。より正確で信頼性が高く効率的なアプローチ(kshスタイルプロセスの交換をサポートするシェルを使用)は次のとおりです。
xargs -r0a <(shuf -zn100 -e -- *) mv -t path-to-new-folder --