名前に:
(コロン)が含まれるファイルのグループがあります。 :
を-
(ダッシュ)に置き換える必要があります。
スクリプトでこれを行う簡単な方法はありますか?
サンプルファイル名:2013-10-11:11:52:08_055456663_045585_.txt
シンプルな1-linerを実行する必要があります(Posix sh
互換シェルを想定):
_for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done
_
説明:
_for ... in ...; do ...; done
_は ループ
_*:*
_ matches 名前に_:
_が含まれる現在のディレクトリ内のすべてのファイルとディレクトリ
f
は、ループ内のそのような各ファイル名に順番に割り当てられます
mv
最初の引数の名前を2番目の引数に変更します。 _-v
_(詳細)は、何をするかを出力するように要求します。このオプションは GNU-utils 固有であるため、Linuxでは使用できますがSolarisでは使用できません
$(...)
サブシェルでコードを実行し、出力を置き換えます
echo
引数を標準出力に出力します
tr
標準出力を読み取り、指定されたマップに従って文字を変換します
bash を使用している場合、$()
を置き換えることにより、余分なシェル($(...)
)がサブプロセス(tr
)で生成されるのを回避できます _${f//:/-}
_ を使用します。
私の別の投稿で述べたように、rename
ツールはあなたのためのトリックを行うことができます。 rename s/:/-/ <files to rename>
と入力するだけです。これにより、最後に名前を付けたすべてのファイルのすべてのコロンがダッシュに置き換えられます。 e。 2013-10-*
こちら 私の他の投稿へのリンク
ファイルが1つまたはいくつかしかない場合は、次のように名前を変更できます。
p="201*"
_。old_name=$(ls | grep $p)
。新しいファイル名に必要な文字を置き換えて保存します。
_new_name=$(ls | grep $p | sed 's/:/_/g') # Using 'sed'
OR
new_name=$(ls | grep $p | tr ':' '_') # Using 'tr'
_
ボーナスクリーンアップ:
a。統一のために、ダッシュ(_-
_)とコロン(_:
_)をアンダースコア(__
_)に置き換える場合は、次のようにします。
_ new_name=$(ls | grep $p | tr ':-' '_');
_
b。最後の下線(_.txt
_の直前)も削除する場合は、_new_name
_変数を次のように設定します。
_ new_name=$(ls | grep $p | tr ':-' '_' | sed 's/_\./\./')
_
mv $old_name $new_name
_注意:mv
名前変更操作のファイル名にspaces
が含まれていると失敗します。その場合は、次のように適切な変数を引用符で囲みます。
_mv "$old_name" $new_name
_ [〜#〜] or [〜#〜] _mv $old_name "$new_name"
_ [〜#〜] or [〜#〜] = _mv "$old_name" "$new_name"
_
_1a: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | sed 's/:/_/g'); mv $old_name $new_name
1b: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':' '_'); mv $old_name $new_name
2: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':-' '_'); mv $old_name $new_name
3: p="201*"; old_name=$(ls | grep $p); new_name=$(ls | grep $p | tr ':-' '_' | sed 's/_\./\./'); mv $old_name $new_name
_
UNIXプロがbashでこれを行うことができると私は確信していますが、Rubyを使用した私の迅速で汚いバージョンを以下に示します。
path_to_files = "/home/username/wrongnames/"
filenames = `ls #{path_to_files}`.split
filenames.each do |fn|
`mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}`
end
path_to_filesを誤った名前のファイルへのパスに設定します。上記のコードをrename.rbというファイルに保存します。
username@machinename$ Ruby rename.rb
これはやり過ぎかもしれませんが、この回答で提供されているリンクにあるスクリプトを使用して、特殊文字の名前を変更できます。
renamer を使用:
$ renamer --find ":" --replace "-" *