- ベストアンサー
UNIXコマンドで連番付ファイルのリネーム方法とは?
- UNIXのsplitコマンドを使用してファイルを分割し、同時にリネームする方法について教えてください。
- 分割したファイルに拡張子を付けるためにrenameコマンドを使用しましたが、うまくいきません。正しい書き方について教えてください。
- 分割からリネームまでを一つの処理で完結させる方法について教えてください。
- みんなの回答 (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
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
「他のファイルが混ざる」ということがなければ for でまわすだけ. ちなみに, 「パイプで繋ぐ」と期待した動作にはならないかもしれない.
- kmee
- ベストアンサー率55% (1857/3366)
-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/coreutils.html#split-invocation renameコマンドはUNIXでは標準ではありません。 http://x68000.q-e-d.net/~68user/unix/pickup?rename https://wiki.ubuntulinux.jp/UbuntuTips/FileHandling/RenameCommand を見ると、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 バージョン情報を表示して終了
お礼
ご回答ありがとうございます 対象ファイル以外のファイルも多くあり、forは使えませんでした。