디렉토리에 100개의 파일이 있고 첫 번째 파일의 일부가 다른 파일과 일치하는 파일만 유지하고 조건이 충족되지 않으면 해당 파일이 없는 모든 파일을 mv합니다. 예를 들어 다음과 같습니다.
man_xyz_1.txt
sig_xyz_1.txt
man_abc_1.txt
man_ttc_1.txt
man_ddd_1.txt
sig_ddd_1.txt
여기서는 man_xyz_1.txt and sig_xyz_1.txt; man_ddd_1.txt and sig_ddd_1.txt
파일 이름( ) 부분이 일치하기 때문에 처음 두 파일( ) 만 유지하고 접두사가 붙은 해당 파일이 없기 때문에 다른 디렉터리에 *_xyz_1.txt and *_ddd_1.txt
mv( )하려고 합니다 . 어떤 도움이라도 환영합니다. 감사해요,man_abc_1.txt and man_ttc_1.txt
sig_*
답변1
이 실행됩니다반대즉, man_*.txt
현재 디렉터리의 모든 파일을 살펴보고 sig_
해당 파일과 쌍을 이룰 수 있는 모든 파일을 processed
디렉터리로 이동합니다. 그런 다음 나머지 파일을 저장해야 하는 위치로 이동할 수 있습니다.
mkdir processed || exit
for name in man_*.txt; do
if [ -e "sig_${name#man_}" ]; then
mv "$name" "sig_${name#man_}" processed
fi
done
매개변수 대체는 ${name#man_}
값으로 확장되고 $name
해당 man_
접두사 문자열을 제거합니다.
이는 processed
디렉토리가 존재하지 않는다고 가정합니다.
시험:
$ tree
.
|-- man_abc_1.txt
|-- man_ddd_1.txt
|-- man_ttc_1.txt
|-- man_xyz_1.txt
|-- script
|-- sig_ddd_1.txt
`-- sig_xyz_1.txt
1 directory, 7 files
$ sh script
$ tree
.
|-- man_abc_1.txt
|-- man_ttc_1.txt
|-- processed
| |-- man_ddd_1.txt
| |-- man_xyz_1.txt
| |-- sig_ddd_1.txt
| `-- sig_xyz_1.txt
`-- script
2 directories, 7 files