![문자열이 포함된 모든 하위 폴더를 상위 디렉터리를 포함하여 새 디렉터리로 이동하는 방법](https://linux55.com/image/203201/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%AA%A8%EB%93%A0%20%ED%95%98%EC%9C%84%20%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A5%BC%20%ED%8F%AC%ED%95%A8%ED%95%98%EC%97%AC%20%EC%83%88%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 이 문제로 어려움을 겪고 있습니다. 내 파일의 예는 다음과 같습니다.
~/download/Video/CE/
~/download/Video/CE/153
~/download/Video/CE/153/2022-03-04
~/download/Video/CE/153/2022-03-05
~/download/Video/CE/281
~/download/Video/CE/281/2022-03-04
~/download/Video/CE/281/2022-03-05
~/download/Video/GA/
~/download/Video/GA/154
~/download/Video/GA/154/2022-03-04
~/download/Video/GA/154/2022-03-05
~/download/Video/GA/615
~/download/Video/GA/615/2022-03-04
~/download/Video/GA/615/2022-03-05
...etc
/download/Video에는 수십 개의 폴더가 있고 /download/video/*/에는 수백 개의 폴더가 있습니다.
"2022-03-04"가 포함된 모든 폴더와 해당 내용을 모두 새 디렉터리로 이동하려고 합니다. 내가 원하는 결과는 다음과 같습니다.
/mnt/d/archive/Video/CE/153/2022-03-04
/mnt/d/archive/Video/CE/281/2022-03-04
/mnt/d/archive/Video/GA/154/2022-03-04
...etc
다양한 방법을 시도해 보았지만 가장 큰 문제는 2022-03-05 폴더(및 슈퍼 디렉터리)를 메인 드라이브의 상위 폴더에 유지하고 싶기 때문에 단순히 비디오 폴더를 /mnt/d/archive로 이동할 수 없다는 것입니다. .
지금까지 시도한 내용은 다음과 같습니다.
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 /mnt/d/archive/Video/CE/$subdir/; done;
^ 그런 다음 /Video/에 GA 및 기타 모든 하위 디렉터리에 대한 코드를 복사하여 붙여넣으세요.
그러면 다음이 생성됩니다.
/mnt/d/archive/Video/CE/153/file.mp4
/mnt/d/archive/Video/CE/153/file2.mp4
/mnt/d/archive/Video/CE/281/file.mp4
...etc
"2022-03-04" 폴더 자체를 복사하지 않는다는 점을 제외하면 훌륭합니다. 2022-03-04 폴더가 필요합니다. 그래서 다음 코드를 시도해 보았습니다.
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 ~/mnt/d/archive/Video/CE/$subdir/2022-03-04; done;
그러나 이제 또 다른 문제가 생겼습니다. 이번에는 폴더나 파일이 복사되지 않았습니다. 방금 "해당 파일이나 디렉터리가 없습니다." 오류가 발생했습니다.
어떤 아이디어가 있나요?
답변1
내 선택은 빠르기 때문에 tar입니다.
(cd ~/download/Video && find . -type d -name 2022-03-04 | tar -T - -cpf - --remove-files | tar -C "/mnt/d/archive/Video/" -xpf -)
답변2
귀하의 질문을 올바르게 이해하면 다음과 같이 작동합니다.
cd ~/download/Video
for i in $(find * -type d -name '2022-03-04'); do
mkdir -p /mnt/d/archive/Video/"$i"
mv "$i"/* /mnt/d/archive/Video/"$i" && rm -r "$i"
done
이는 다음을 수행합니다.
- "2022-03-04"라는 이름의 모든 디렉터리를 찾습니다.
- 필요에 따라 아카이브 위치에 디렉터리 트리를 다시 만듭니다.
- '2022-03-04' 내용을 해당 archive 디렉터리로 이동하고, 원본 '2022-03-04' 디렉터리를 삭제한다.
(표준 면책조항, 파일 이름에 이상한 문자가 포함되어 있으면 깨집니다.)