web-dev-qa-db-ja.com

区切り文字で複数のファイルの名前を変更します

どうすれば複数のファイルの名前を変更できますか、

IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam
IonXpress_050.T11114.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam

に、

T11014.bam 
T11114.bam
4
Vonton

コマンドラインから名前を変更する方法はいくつかあります。こちらがワンライナーです。 .bamファイルがあるディレクトリに移動して、これを試してください。

for i in *.bam; do mv "$i" "$(echo $i | awk -F"." '{print $2}').bam"; done

使い方:

  • Forループと目的のファイルをトラップするシェルグロブを使用して、
 for i in * .bam 
 do 
 mv source destination 
 done 
  • 次に、awkを使用して、.で区切られた文字列の2番目のフィールドとして保持する部分を抽出します。
 $ echo IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam | awk -F "。" '{print $ 2}' 
 $ T11014 

-Fオプションを使用してカスタムフィールド区切り文字を使用できます。詳細については、man awkを参照してください。

6
souravc
rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn

-vnを削除して、目的の動作を確認できます。これが私のテストハーネスです。

$ touch 34234234kh.TESTING00{1..3}.234978623478y234.bam
$ rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn
34234234kh.TESTING001.234978623478y234.bam renamed as TESTING001.bam
34234234kh.TESTING002.234978623478y234.bam renamed as TESTING002.bam
34234234kh.TESTING003.234978623478y234.bam renamed as TESTING003.bam
8
Oli

すばらしいkrenameプログラムを使用できます。

Sudo apt-get install krename

このプログラムでは、結果のプレビューがあり、特に、特定の範囲のファイル名マスクのみを使用できます。

enter image description here

マスクは➀にあります。 fileに元のファイル名、➂に予定される名前を参照してください。うまくいったら、finishを押してください:➃—この後、ファイルの名前が実際に変更されます。

4
Adobe

Findコマンドを使用して、すべての*.bamファイルを検索し、whileループで各ファイルを1つずつ読み取り、最後にmvコマンドでファイル名を目的の名前に変更します。

find /path/to/maindir -type f -name "*.bam" -print0 | while IFS= read -d '' -r file
do
    echo mv -v "$file" /path/to/maindir/"$(awk -F'.' '{print $2".bam"}'<<< "$file")";
done

結果:

mv -v /home/USER/maindir/IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam /home/USER/maindir/T11014.bam
mv -v /home/USER/maindir/IonXpress_050.T11114.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam /home/USER/maindir/T11114.bam

結果を確認した場合は、echoコマンドを削除して実際の名前を変更してください。

3
αғsнιη

仮定して

  • 目的の名前-「body」は常に最初のドットの後にあります
  • .bam拡張は常に存在します
  • ディレクトリは「フラット」であり、サブディレクトリはありません

このpythonソリューションが仕事をするはずです。セクションの数は異なる場合がありますが、それでも動作します。

#!/usr/bin/env python3

import os
import shutil
import sys

directory = sys.argv[1]

for item in os.listdir(directory):
    if not item.startswith("."):
        edit = item.split("."); newname = (".").join([edit[1], edit[-1]])
        if len(edit) > 2:
            shutil.move(directory+"/"+item, directory+"/"+newname)

それを空のファイルにコピーし、実行可能にして(python3プレフィックスなしで実行する)、コマンドで実行します:

</path/to/script> <directory_with_files>

そのため:

monkey.banana.peanut.bam

になる

banana.bam

そして

monkey.Apple.peaunt.another_string.and_alot_more.bam

になる

Apple.bam

ながら

something.bam

放置されます。

2
Jacob Vlijm

reモジュールによる別のpythonソリューション。

script.py

#!/usr/bin/python3
import sys
import re
import os
import shutil

directory = sys.argv[1]
for item in os.listdir(directory):
    if '.' in item:
        newname = re.sub(r'^[^.]+\.([^.]*).+(\.bam)', r'\1\2', item)
        shutil.move(directory+"/"+item, directory+"/"+newname)

実行方法

python3 script.py /path/to/the/directory/where/the/files/you/want/to/rename/are/stored
1
Avinash Raj

これらの答えはすべて良いですが、プログラミングを必要としない方法を示したいと思います(すでにSublime Textがインストールされている場合ははるかに高速になります)

  • Sublime Textのインストール( http://www.sublimetext.com/
  • Sublime Package Control( https://packagecontrol.io/installation
  • パッケージFileBrowserをインストールします(ctrl+shif+p> Install Package> FileBrowser http://github.com/aziz/SublimeFileBrowser
  • FileBrowserキーボードショートカットを構成します(ctrl+shift+p> Key Bindings User)。

    { "keys": ["f1"], "command": "dired", "args": { "immediate": true } }

  • fileBrowserを起動します(F1

  • ファイルを複数選択します(共通パターンを選択> ctrl+d
  • 名前変更モードに入る(shift+R
  • 一般的なテキストエディタのように編集します(例:ctrl+rightは単語間をジャンプします)
  • Enterを使用して名前変更を適用する
0
select