Unix의 파일 목록에서 찾기 및 이동

Unix의 파일 목록에서 찾기 및 이동

파일 이름이 포함된 목록 파일이 있고 목록에서 한 번에 하나의 파일 이름을 읽고 여러 하위 폴더가 있는 디렉터리 구조에서 해당 파일 이름을 찾은 다음 발견되면 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추가할 수 있습니다 .-quitfindfind

작동 방식을 보여주세요:

$ 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

관련된:

관련 정보