recon.text
ファイル名をディレクトリ名に変更したいと思います。私は1000のディレクトリを持っています。助けてください?
7_S4_R1_001_tri10_sha/recon.text
8_S1_R1_001_tri15_sha/recon.text
9_S8_R1_001_tri20_sha/recon.text
10_S5_R1_001_tri25_sha/recon.text
11_S3_R1_001_tri30_sha/recon.text
答え1
そして名前を変更する:
rename -n 's!(.*sha)/recon\.text!$1/$1.txt!' */recon.text
-n
実際に名前を変更するのに十分な出力がある場合は、スイッチを削除してください。
これを行うこともできないかもしれない同じ名前の他のツールがあるので注意してください。
パッケージの一部である名前変更コマンドはutil-linux
そうではありません。
次のコマンドを実行すると(GNU
)
$ file "$(readlink -f "$(type -p rename)")"
Perl script, ASCII text executable
を含めて含まない結果を得ると、ELF
これが正しいツールであるようです=)
そうでない場合は、それをデフォルト値に設定し(通常はすでに適用されている)、Debian
次のように派生しますUbuntu
。
$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename
RedHatシリーズディストリビューションの場合:
yum install prename
'prename'パッケージは次の場所にあります。エッフェルリポジトリ。
ArchiLinuxの場合:
pacman -S perl-rename
*BSDの場合:
pkg install gprename
またはp5-File-Rename
Macユーザーの場合:
brew install rename
他のディストリビューションにこのコマンドがない場合は、パッケージマネージャを検索してインストールするか、手動で行う(学科がありません...)
このツールはもともとPerlの父親であるLarry Wallによって書かれました。
答え2
標準ツールを使用すると、親ディレクトリでこれを行うことができます。
for file in */recon.text; do mv -- "$file" "${file%/*}/${file%/*}"; done
見つかったすべてのファイルの$file
名前をに変更します${file%/*}/${file%/*}
。これは${file%/*}
「削除されたファイルパス」を意味します/[anything...]
。
たとえば、7_S4_R1_001_tri10_sha/recon.text
ファイルの場合
${file%/*}
次に展開7_S4_R1_001_tri10_sha
- 以来
${file%/*}/${file%/*}
。7_S4_R1_001_tri10_sha/7_S4_R1_001_tri10_sha
- 次に実行される操作はです
mv -- "7_S4_R1_001_tri10_sha/recon.text" "7_S4_R1_001_tri10_sha/7_S4_R1_001_tri10_sha"
。
do
との間にエコーを追加することで、実際mv
にコマンドを実行する前にコマンドが実行するアクションを確認できます。