서로 다른 디렉터리에 있는 여러 파일을 하나의 고유한 디렉터리로 이동하는 방법은 무엇입니까?

서로 다른 디렉터리에 있는 여러 파일을 하나의 고유한 디렉터리로 이동하는 방법은 무엇입니까?

220개의 디렉토리가 있고 각 디렉토리에는 2개의 파일이 들어 있습니다. 모든 파일의 종료는 동일합니다(*.fq.gz). 이 모든 파일을 하나의 고유한 디렉터리로 이동하고 싶습니다.

쉘 루프를 사용하면 그렇게 할 수 있을 것 같은데 어떻게 해야 할지 모르겠습니다...

답변1

특별히 주의할 필요가 없을 때 사용하는 기능입니다.

mkdir unique_dir && mv */*.fq.gz unique_dir/

내가 뭔가를 놓친 게 아니라면 말이죠.

답변2

당신 말이 맞아요. 두 개의 for 루프를 사용하여 이 작업을 수행할 수 있습니다. 하나는 다른 하나입니다. 이를 수행하기 위해 bash 스크립트를 생성하겠습니다. 다음과 같이 어떻게 보이는지 살펴보겠습니다.

#!/bin/bash

for dir in */; do
  echo "$dir"
  cd "$dir"
  for file in *; do
    echo "moving $file" 
    mv $file ~/targetdir    
  done
  cd ..
done

더 빠른 스크립트를 원할 경우 스크립트에서 에코를 제거하면 됩니다. 진행 상황을 쉽게 추적할 수 있도록 만들었습니다.

파일을 생성하고 해당 명령을 복사하면 됩니다. 그런 다음 실행 권한을 부여하고 다른 디렉터리가 있는 기본 디렉터리에서 chmod +x scriptfile실행합니다 . ./scriptfiletargetdir 및 scriptfile을 대상 디렉터리 및 스크립트 파일 이름으로 바꾸는 것을 잊지 마십시오.

디렉터리에 더 많은 파일이 있는 경우 루프 에서 *로 바꾸면 2개의 파일에 대해서만 반복됩니다.*.fq.gzfor file

경고!!! 대상 디렉터리도 기본 디렉터리 내부에서 반복되므로 기본 디렉터리 내에 대상 디렉터리를 만들지 마세요.


편집: @steeldriver가 제안한 대로 명령을 제거 for dir하고 for file명령을 사용하여 */*.fq.gz더 빠른 루프를 만들 수 있습니다. 나는 디렉토리 내부에서 무슨 일이 일어나고 있는지 더 잘 추적하기 위해 그것들을 유지하기로 결정했습니다.

편집: @waltinator가 답변한 find 및 xarg 명령의 매뉴얼 및 웹 페이지에 대해 조사하는 동안 더 편리하고 빠르며 안전하다는 것을 알았습니다. 와 같은 find 명령의 -exec 옵션을 사용하여 xarg에 대한 대안을 찾았습니다 find . -type f -name '*.fq.gz' -exec mv --backup=numbered --target-directory=$dest {} \;.

답변3

많은 파일이나 재미있는 이름을 가진 파일을 처리할 때 사용하는 도구입니다 find. 다음을 xargs읽고 man find;man xargs다음과 같이 하십시오:

dest=../destination # must be outside this directory tree
mkdir $dest

find . -type f -name '*.fq.gz' -print0 |\
   xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest

결과가 만족스러우면 " echo mv"를 " "로 바꾸세요 mv.

$dest현재 디렉토리 난이도를 제외하려면 다음을 사용하십시오 --prune.

find . -type d -name "$dest" -prune -o -type f -name '*.fq.gz' -print0 |\
   xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest

답변4

krusader can search files and save to a custom tab then you can select all of those (or filter the list) and move them to the destination

sudo apt install krusader

당신은 추가하는 것이 좋습니다

sudo apt install krename

최상위 소스 디렉토리 도구로 이동하여 검색하거나 crtl+s 피드를 클릭하여 목록 상자 편집 모든 파일을 선택하고 다른 패널로 복사하거나 소스 대상인 다른 탭인 F5 다른 패널

관련 정보