파일 이름 접두사가 동일한 디렉토리로 모든 파일을 어떻게 이동 (또는 복사) 할 수 있습니까?


9

배쉬 사용

그래서 부모 디렉토리에 무작위로 배치 된 많은 파일이 있다고 가정 해 봅시다 ~/src. 특정 접미사와 일치하는 모든 파일을 가져 와서 ~/dist디렉토리 로 이동 (또는 복사)하고 싶습니다 .

이를 위해 모든 파일 이름에이 이름 지정 규칙이 있다고 가정합니다.

<filename_prefix>.<filename_suffix>

이것이 특정 파일을 모두 가져 filename_suffix와서 dist 폴더에 넣는 빠른 방법이라는 것을 알았습니다 .

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

이제 한 단계 더 나아가 ...이 경우 find 출력을 filename사용 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

답변:


10

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

glob를 작동 shopt -s globstar시키는 데 사용하십시오 **(또는 zsh! 사용). echo명령이 원하는 것을 인쇄하면 나중에 s를 제거하십시오 .


bash를 사용하는 것도 마찬가지입니까?
qodeninja

@codeninja shopt -s globstar, 내 편집을 참조하십시오. 레벨이 두 개인 경우 사용할 수 */*.*있으며 스 니펫은 모든 쉘에서 작동합니다.
Gilles 'SO- 악마 그만'

2

부정 행위 찾기 명령 줄 :

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

실제로 찾기 LOL에서 bash 스크립트를 호출하는 해결 방법.

= P


1
라는 파일이 있으면 어떻게 될지 맞춰보세요… happy rm -rf /! 이러한 종류의 코드에는 -1이 필요합니다.
Stéphane Gimenez

귀하의 편집이 충분하지 않습니다 :하자 당신이 링크를 cliked 및 다운로드 한 말을 Yay" rm -rf / "Rox0r.avi다시 ... 문제처럼이
스테판 히메네스

(그리고 이런 종류의 대체물을 안전하게 만드는 방법은 없습니다).
Stéphane Gimenez

1
어쩌면 다르게 할 수도 있습니다. 다음과 같이 작동하는 것 같습니다 -exec bash -c 'command which uses "$1"' bash '{}' ';'.. 어쨌든 그것은 무의미합니다.
Stéphane Gimenez 2013

1
@ StéphaneGimenez 완료, bash는 사용하는 것이 아닙니다. LOL
yuyichao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.