파일 이름 접두사가 동일한 디렉터리로 모든 파일을 이동(또는 복사)하는 방법은 무엇입니까?

파일 이름 접두사가 동일한 디렉터리로 모든 파일을 이동(또는 복사)하는 방법은 무엇입니까?

배시 사용

부모 디렉터리에 무작위로 배치된 파일 묶음이 있고 ~/src특정 접미사와 일치하는 모든 파일을 가져와 디렉터리로 이동(또는 복사)하고 싶다고 가정해 보겠습니다 ~/dist.

이를 위해 모든 파일 이름은 다음과 같은 명명 규칙을 따른다고 가정합니다.

<filename_prefix>.<filename_suffix>

나는 이것이 특정 속성을 가진 모든 파일을 가져와 filename_suffixdist 폴더에 넣는 빠른 방법이라는 것을 알았습니다.

mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;

이제 한 단계 더 나아갑니다. 이 경우 filenamefind의 출력을 사용하여 filename_prefix동일한 이름의 디렉토리를 생성한 ~/dist다음 해당 접두사가 있는 모든 파일을 적절한 디렉토리로 이동(또는 복사)하려면 어떻게 해야 합니까?

mkdir ~/dst
find source -name "*.xrt,*.ini,*.moo" -exec mv -i {} -t ~/dst \;

본질적으로, 다음과 같은 구조를 생성하기 위해 위의 명령을 어떻게 변경합니까(또는 다른 명령을 사용할 수도 있음)?

(산출)

~/dist/people/people.xrt
~/dist/games/games.xrt
~/dist/games/games.moo
~/dist/games/games.ini
~/dist/monkeys/monkeys.ini
~/dist/monkeys/monkeys.xrt

이와 같은 디렉토리 트리에서?

(입력하다)

~/src/xrt/people.xrt
~/src/xrt/games.xrt
~/src/conf/games.ini
~/src/pack/monkeys.xrt
~/src/e344/games.moo
~/src/e344/monkeys.moo
~/src/en-us/monkeys.ini

답변1

find이런 경우에는 어떻게 해야 할지 말하기 어렵습니다 .

쉘을 사용하는 것이 더 좋습니다.

for i in **/*.{xrt,ini,moo}; do
  FILE=$(basename "$i")
  DIR=~/dst/${FILE%.*}
  echo mkdir -p -- "$DIR"
  echo mv -i -t "$DIR" -- "$i"
done

shopt -s globstarglob 작업을 수행 하기 위한 것입니다 **(또는 zsh를 사용하십시오!). echo명령이 원하는 것을 인쇄하면 나중에 s를 제거하십시오.

답변2

치트 검색 명령줄:

find source -name "*.xrt,*.ini,*.moo" -exec env file={} bash -c 'base="$(basename "$file")";dir="dst/${base%.*}";mkdir -p "$dir";cp "$file" "$dir"' \;

실제로 find LOL에서 bash 스크립트를 호출하는 솔루션입니다.

=피

관련 정보