문자열이 포함된 모든 하위 폴더를 상위 디렉터리를 포함하여 새 디렉터리로 이동하는 방법

문자열이 포함된 모든 하위 폴더를 상위 디렉터리를 포함하여 새 디렉터리로 이동하는 방법

나는 이 문제로 어려움을 겪고 있습니다. 내 파일의 예는 다음과 같습니다.

~/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

이는 다음을 수행합니다.

  1. "2022-03-04"라는 이름의 모든 디렉터리를 찾습니다.
  2. 필요에 따라 아카이브 위치에 디렉터리 트리를 다시 만듭니다.
  3. '2022-03-04' 내용을 해당 archive 디렉터리로 이동하고, 원본 '2022-03-04' 디렉터리를 삭제한다.

(표준 면책조항, 파일 이름에 이상한 문자가 포함되어 있으면 깨집니다.)

관련 정보