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() "$@"