2011-10-07 10 views
5

私は、現在の作業ディレクトリを利用し、すべてのファイルをスキャンし、.txtファイルであるかどうかを確認するスクリプトを作成しようとしています。次に、すべてのファイル(テキストファイル)を取り出し、名前にアンダースコアが含まれているかどうかを確認し、アンダースコアをハイフンに変更するかどうかを確認します。UNIXディレクトリのファイルの名前を変更する - シェルスクリプト

私は、これは難しい注文であるが、ここではこれまでのところ、私が持っている大まかなコードであることを知っている:私は考えていた何

#!/bin/bash 
count=1 
while((count <= $#)) 
     do 
      case $count in 
       "*.txt") sed 's/_/-' $count 
      esac 
      ((count++)) 
done 

が、これは、引数として現在の作業ディレクトリ内のファイルを取るだろうということですすべてのファイル($ countまたは "count"で表されるファイル)をチェックします。その後、すべてのファイルに対して、.txtで終わったかどうかをチェックし、そうであれば、sedを使ってすべてのアンダースコアをハイフンに変更します。私は主な問題の一つは、スクリプトが現在の作業ディレクトリからファイルを読み込んでいないということです。私は、スクリプトを実行するコマンドの後にディレクトリを含めようとしましたが、各ファイルの代わりに各行をとったと思います(すべての行に4つのファイルがあるので)。

とにかく、どんな助けでも大歓迎です!また、私のコードが悪いことは残念ですが、私はUNIXにとって非常に新しいです。

+0

1つの問題は、 '$ count'が変数' count'の値であることです。これは整数です。位置パラメータを繰り返し処理する場合は、次のように記述します。 'for" $ @ "のファイル。 do ... 'または省略形' for file; do ... ... –

+0

ここにチェックを入れてください:http://theunixshell.blogspot.com/2013/01/bulk-renaming-of-files-in-unix.html – Vijay

答えて

0
 
$ ls *.txt | while read -r file; do echo $file | 
    grep > /dev/null _ && mv $file $(echo $file | tr _ -); done 

(未テスト)

+0

これはファイル名にスペースを含むファイルでは失敗します。あなたが間違った 'mv'をすると、データを失うかもしれません。 –

+0

はい、スペースを含むファイルでは失敗します。ファイル名にスペースを入れる人は、すべてのデータを失う必要があります。 :) –

+0

私は一種の同意... ...-)しかし、私たちはお互いのことを学ぶためにここに私はこのコメントを追加した理由です。よろしく。 –

1

理由ではない:すべての入力の男性のための

rename 's/_/-/' *.txt 
+0

'rename:コマンドが見つかりませんでした。問題は、特定のLinuxディストリビューションではなく、Unixに関することです。しかしPerlがどこにでもインストールされていることを考えると、これは素晴らしい、柔軟なソリューションです。 –

+2

@RolandIllig:私は 'rename'がどこにでもあるのではないことを知っていますが、shebangから、私はそれがいくつかの現代的なunixのようなシステムで実行されていると仮定しました。 –

2
for fname in ./*_*.txt; do 
    new_fname=$(printf '%s' "$fname" | sed 's,_,-,') 
    mv "$fname" "$new_fname" 
done 
+2

シェルがbashの場合、次のように書くことができます: 'new_fname = $ {fname // _/- }' –

0

ありがとう!すべてのすべてで、私は私が見つけた解決策は、私のスキルレベルに最も適しあったと思う:

ls *.txt | while read -r file; do echo file | 
    mv $file $(echo $file | sed 's,_,-,'); 
done 

これは、私が行っ必要なものだ、と私の目的のために、私は、スペースに関するあまりにも心配していないです。しかし、あなたの素晴らしい提案のおかげで、あなたはすべて非常に知的です!

関連する問題