배시 사용
부모 디렉터리에 무작위로 배치된 파일 묶음이 있고 ~/src
특정 접미사와 일치하는 모든 파일을 가져와 디렉터리로 이동(또는 복사)하고 싶다고 가정해 보겠습니다 ~/dist
.
이를 위해 모든 파일 이름은 다음과 같은 명명 규칙을 따른다고 가정합니다.
<filename_prefix>.<filename_suffix>
나는 이것이 특정 속성을 가진 모든 파일을 가져와 filename_suffix
dist 폴더에 넣는 빠른 방법이라는 것을 알았습니다.
mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;
이제 한 단계 더 나아갑니다. 이 경우 filename
find의 출력을 사용하여 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 globstar
glob 작업을 수행 하기 위한 것입니다 **
(또는 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 스크립트를 호출하는 솔루션입니다.
=피