파일 이름이 포함된 목록 파일이 있고 목록에서 한 번에 하나의 파일 이름을 읽고 여러 하위 폴더가 있는 디렉터리 구조에서 해당 파일 이름을 찾은 다음 발견되면 diff 폴더로 이동하려고 합니다.
전임자:
listfile.txt
Content of the file--
filename1.txt
filename2.txt
maindir
|--subdir1
|---subdir2/filename1.txt
|---subdir3/filename2.txt
listfile.txt에서 파일명을 하나씩 읽어서 diff 폴더(예: /destfolder)로 이동합니다.
어떤 제안이라도 좋을 것입니다.
고마워요, 캐빈
답변1
쉘 루프를 사용하고 find
각 파일 이름에 대해 한 번 호출하십시오.
mkdir -p archive_dir
while IFS= read -r filename; do
find maindir -type f -name "$filename" -exec mv {} archive_dir ';'
done <listfile.txt
파일을 찾은 후에도 일치하는 파일 이름을 계속 찾기 때문에 약간 비효율적입니다.씌우다이사한 사람).
GNU를 사용하는 경우 첫 번째 파일을 이동한 후 프로세스가 중지 되도록 명령 끝에 find
추가할 수 있습니다 .-quit
find
find
작동 방식을 보여주세요:
$ cat listfile.txt
filename1.txt
filename2.txt
.
|-- listfile.txt
`-- maindir
|-- subdir1
|-- subdir2
| `-- filename1.txt
`-- subdir3
`-- filename2.txt
4 directories, 3 files
(위의 루프를 실행)
그 다음에:
.
|-- archive_dir
| |-- filename1.txt
| `-- filename2.txt
|-- listfile.txt
`-- maindir
|-- subdir1
|-- subdir2
`-- subdir3
5 directories, 3 files
관련된: