2

320Gの画像を含むフォルダーがあり、画像を5つのサブフォルダーにランダムに移動したい(5つのサブフォルダーに移動する必要があるだけです)。しかし、bashスクリプトについては何も知りません。誰か助けてもらえますか?ありがとう!

4

5 に答える 5

3

最初の文字に基づいて、ファイルを別のディレクトリに移動できます。

mv [A-Fa-f]* dir1
mv [F-Kf-k]* dir2
mv [^A-Ka-k]* dir3
于 2012-05-01T07:00:59.447 に答える
2

これが私の見解です。これを使用するには、スクリプトを別の場所(フォルダー内ではなく)に配置しますが、フォルダーから実行します。スクリプトファイルrmove.shを呼び出す場合は、たとえば〜/ scripts /に配置してから、フォルダにcdして次のコマンドを実行します。

ソース〜/ scripts / rmove.sh

#/bin/bash

ndirs=$((`find -type d | wc -l` - 1))

for file in *; do
        if [ -f "${file}" ]; then
                rand=`dd if=/dev/random bs=1 count=1 2>/dev/null | hexdump -b | head -n1 | cut -d" " -f2`
                rand=$((rand % ndirs))

                i=0
                for directory in `find -type d`; do
                        if [ "${directory}" = . ]; then
                                continue
                        fi
                        if [ $i -eq $rand ]; then
                                mv "${file}" "${directory}"
                        fi
                        i=$((i + 1))
                done
        fi
done
于 2012-05-01T07:24:20.703 に答える
2

これが問題に対する私の刺し傷です:

#!/usr/bin/env bash

sdprefix=subdir
dirs=5

# pre-create all possible sub dirs
for n in {1..5} ; do
    mkdir -p "${sdprefix}$n"
done

fcount=$(find . -maxdepth 1 -type f | wc -l)

while IFS= read -r -d $'\0' file ; do
    subdir="${sdprefix}"$(expr \( $RANDOM % $dirs \) + 1)

    mv -f "$file" "$subdir"
done < <(find . -maxdepth 1 -type f -print0)
  • 膨大な数のファイルで動作します
  • ファイルが移動できない場合はくちばしをしません
  • 必要に応じてサブディレクトリを作成します
  • 異常なファイル名で壊れない
  • 比較的安い
于 2012-05-01T11:00:47.887 に答える
1

どのスクリプト言語でもそうなるので、ここでPythonで記述します。

#!/usr/bin/python

import os
import random

new_paths = ['/path1', '/path2', '/path3', '/path4', '/path5']
image_directory = '/path/to/images'
for file_path in os.listdir(image_directory):
    full_path = os.path.abspath(os.path.join(image_directory, file_path))

    random_subdir = random.choice(new_paths)
    new_path = os.path.abspath(os.path.join(random_subdir, file_path))

    os.rename(full_path, new_path)
于 2012-05-01T07:01:06.230 に答える
-1
mv `ls | while read x; do echo "`expr $RANDOM % 1000`:$x"; done \
| sort -n| sed 's/[0-9]*://' | head -1` ./DIRNAME

現在の画像ディレクトリで実行すると、このコマンドは一度に1つのファイルを選択して移動し、移動する./DIRNAMEファイルがなくなるまでこのコマンドを繰り返します。

`は単に文字を引用するのではなく、逆引用符であることに注意してください。

于 2012-05-01T07:10:41.177 に答える