同じディレクトリ内の他のファイルと同じ名前と拡張子を持つようにファイル名を変更する方法

同じディレクトリ内の他のファイルと同じ名前と拡張子を持つようにファイル名を変更する方法

findコマンドを使用して複数のサブディレクトリにある "msf.txt"というファイルを編集しようとしていますが、同じ拡張子を共有するディレクトリ内のすべてのファイルと同じファイル名と拡張子を使用したいと思います。たとえば、私がmsf.txtファイルとmsf-01.txtファイルを含むサブディレクトリの1つにあるとしましょう。 msf.txtの名前をmsf-01.txtに変更したいと思います。私は多くのサブディレクトリでこれを自動的に実行したいのですが、ディレクトリ名に「data」というフレーズを含むサブディレクトリでのみ可能です。誰でもアドバイスできますか?私はfindのようなものを使用することを好みます。

現在のディレクトリの外観は次のとおりです。

main/
|--sub01    
    ├── data/
    │   ├── mgw.txt
    │   ├── mgw-01.txt
    ├── pictures/
    │   ├── bootstrap1.png
    │   └── bootstrap2.png
    └── extra/
        ├── stuff.txt

 |--sub02   
    ├── data/
    │   ├── mgw.txt
    │   ├── mgw-02.txt
    ├── pictures/
    │   ├── bootstrap1.png
    │   └── bootstrap2.png
    └── extra/
        ├── stuff.txt

これが私が望む姿です。データディレクトリの.txtファイルには、mgw.txtファイルの内容が含まれています。

main/
|--sub01    
    ├── data/
    │   ├── mgw-01.txt
    ├── pictures/
    │   ├── bootstrap.png
    │   └── bootstrap.png
    └── extra/
        ├── stuff.txt

 |--sub02   
    ├── data/
    │   ├── mgw-02.txt
    ├── pictures/
    │   ├── bootstrap1.png
    │   └── bootstrap2.png
    └── extra/
        ├── stuff.txt

答え1

たぶん、次のようなものがあります。

#! /bin/zsh -
would-do() print -r -- "$@"

for f (**/data/mgw.txt(N)) {
   others=($f:r-*.txt(N))
   if (($#others)); then
     would-do mkdir -p $f:h:h/backup &&
       would-do mv $others $f:h:h/backup/ &&
       would-do mv $f $others[1]
   fi
}

実際に行うことwould-doに定義を変更してください。would-do() "$@"

関連情報