find 명령을 사용하여 여러 하위 디렉터리에 있는 "msf.txt"라는 파일을 편집하려고 하는데, 동일한 확장자를 공유하는 디렉터리의 모든 파일과 동일한 파일 이름 및 확장자를 사용하고 싶습니다. 예를 들어, 내가 msf.txt 파일과 msf-01.txt 파일이 포함된 하위 디렉터리 중 하나에 있다고 가정해 보겠습니다. 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() "$@"