プロが教える店舗&オフィスのセキュリティ対策術

いつもOKWaveでお世話になっております。

表題の件ですが、
UNIXのsplitコマンドで分割したファイルに拡張子を付けたく
コマンドライン上で分割されたファイルを同時にリネームする方法を探しております

ファイル分割
% split -a 3 -d -l 100 sample.txt sample_

※100行単位で分割ファイルを3桁の数字で連番を付けています

処理結果
sample_000
sample_001
sample_002
sample_003
・ ・ ・

上記ファイルに「.txt」を付けたいと考えております
例)
sample_000.txt
sample_001.txt
sample_002.txt
sample_003.txt
・ ・ ・

書き方の問題かと思うのですが、
renameコマンドを使いファイル名を変更しようとするも変化なしとなります
% rename sample_* sample_*.txt sample_*


最終的にはコマンドをパイプで繋いで
分割からリネームまで1本の処理で完結したいと考えております。


恐れ入りますが、ご教示のほどよろしくお願いいたします。

A 回答 (3件)

確認しました。



coreutilsのNEWSより

> * Noteworthy changes in release 8.16 (2012-03-26) [stable]

> split now accepts the --additional-suffix option, to append an
> additional static suffix to output file names.

ということなので、coretilsを8.16以上にアップデートすれば、 --additional-suffix が使えます。


現在のまま使うなら、次のようにします
(1)変換元のファイル名を取得
(2)元ファイル名に .txt を付けた変換先のファイル名を用意
(3) mv 変換元 変換先 (あるいは、これと同等の操作) を行う
(4) (1),(2),(3)を全対象ファイルについて実行



私ならこうかな。
\ls -1 sample_[0-9][0-9][0-9] | sed 's/.*/mv & &.txt/' | sh
    • good
    • 0

「他のファイルが混ざる」ということがなければ for でまわすだけ.



ちなみに, 「パイプで繋ぐ」と期待した動作にはならないかもしれない.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

対象ファイル以外のファイルも多くあり、forは使えませんでした。

お礼日時:2013/03/14 15:46

-d オプションを使える、ということは、GNU版のsplitですよね?


だとすると、man split とか split --helpとかでマニュアルを読めば

‘--additional-suffix=suffix’
Append an additional suffix to output file names. suffix must not contain slash.

というのがあります。
http://www.gnu.org/software/coreutils/manual/cor …


renameコマンドはUNIXでは標準ではありません。
http://x68000.q-e-d.net/~68user/unix/pickup?rename
https://wiki.ubuntulinux.jp/UbuntuTips/FileHandl …
を見ると、2種類の書式のが出回っているようです。
どちらを使うにしろ
rename sample_* sample_*.txt sample_*
という書き方では期待通りに動きません。

なお、 * はコマンドに渡す前に、シェルで展開されます。
sample_* sample_*.txt
で、 前の*と後の*を対応させようとお考えなのでしょうが、 sample_* はこの*に対応したファイル名一覧に書き換えられ、実際に実行されるのは
rename sample_001 sample_002 sample_003 (略) sample_*.txt sample_001 sample_002 sample_003 (略)
というコマンドラインです。
Windowsのワイルドカードとは動作が違うので注意しましょう

この回答への補足

ご回答ありがとうございます。

--additional-suffix=suffixを付けて実行したところ
認識できないオプションと表示されました

splitのhelpも項目としては表示されませませんでした
教えて頂きましたオプションは入っていないようです

% split --help
使用法: split [オプション] [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'. With no INPUT, or when INPUT
is -, read standard input.

長いオプションに必須の引数は短いオプションにも必須です.
-a, --suffix-length=N use suffixes of length N (default 2)
-b, --bytes=SIZE put SIZE bytes per output file
-C, --line-bytes=SIZE put at most SIZE bytes of lines per output file
-d, --numeric-suffixes use numeric suffixes instead of alphabetic
-l, --lines=NUMBER put NUMBER lines per output file
--verbose 各々の出力ファイルを開く直前に, 標準エラー出力に
診断メッセージを表示
--help この使い方を表示して終了
--version バージョン情報を表示して終了

補足日時:2013/03/06 22:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!