0

次の文字列を使用して、大きなファイル (2.8G) を小さなファイル (284 ファイルの .txt) のリストに分割しました。

split -a 3 -C 10m -d 2 file.txt output_       
find . -type f -exec mv '{}' '{}'.txt \; 

次に、284 個のファイルのそれぞれを対応するフォルダーに入れたいので、284 個のフォルダーのリストを作成しました。私が使用した文字列は次のとおりです。

for num in {1..284}; do
  mkdir output$num
done

フォルダー内の各ファイルをコピーするための文字列は次のとおりです。

for i in *.txt do
  dir=${i%.txt}
  cp "$i" "$dir"
done

問題は、最初のファイルの名前が output_000.txt で、フォルダーの名前が output_0 であるため、各ファイルを対応するフォルダーに配置することです。これは、0 から 100 までのファイルで発生します。

どうすればこの問題を解決できますか?

4

1 に答える 1

2

たとえばs=001、パディングされた数値文字列がある場合は、 を使用して数値に変換できます$((s))

スクリプトを次のように変更してみてください。

for i in *.txt
do 
    prefix=${i%.txt} 
    num=$((${prefix#*_}))
    cp "$i" "output_${num}"
done

にコピーoutput_000.txtされoutput_0ます。

于 2013-02-22T10:49:50.753 に答える