여러 개의 디렉터리가 있는데 각 디렉터리에는 이미지가 포함된 "샘플" 디렉터리가 포함되어 있습니다. 내가 원하는 것은 각 파일의 파일 이름 끝에(확장자 앞에) 텍스트 접미사를 추가한 다음 디렉터리의 내용을 해당 상위 디렉터리에 복사하는 것입니다.
기본적으로 /maindir/dir1/example/, /maindir/dir2/example 등의 파일 이름을 바꾸고 해당 상위 디렉터리(예: dir1 및 dir2)로 복사/이동하기를 원합니다. 모든 "examples" 디렉터리의 내용은 .jpg 확장자를 가진 이미지입니다. 이 문제를 올바른 방식으로 진행하고 있는지는 모르겠지만 다음을 수행하여 복사 부분을 수행하는 방법을 알아낼 수 있었습니다.
find /path/to/folder/ -type d -name example -execdir bash -c 'cp "$1"/* .' cp {} \;
내용을 상위 폴더에 올바르게 복사하지만 find를 사용할 때 복사된 파일에 접미사를 추가하는 방법이 약간 혼란스럽습니다.
답변1
find
한 가지 방법은 루프를 사용 for
하고 각 f
파일 경로에 대해 사용하는 것 입니다.매개변수 확장대상 이름( )을 생성할 수 있도록 확장자( t=${f##*.}
), 기본 이름( b=${f##*/}
) 및 확장자가 없는 기본 이름( )을 추출합니다 .${b%.*}
n=${b%.*}-thumb.${t}
find /path/to/folder/ -type d -name example -execdir sh -c 'for f in "${1}"/*;
do t=${f##*.}; b=${f##*/}; n=${b%.*}-thumb.${t}; cp -- "$f" "$n"; done' cp {} \;
실행될 내용을 인쇄하기 위해 항상 echo
앞에 하나를 삽입 할 수 있습니다.cp
또 다른 방법 zsh
:
autoload zmv
zmv -n '(**/)example/(*)(.*)' '${1}${2}-thumb${3}'
-n
(시험 실행) -C
복사본 파일 로 교체합니다 .