일부 파일의 이름을 바꾸고 다른 파일을 디렉토리에서 제외하고 싶습니다. 나는 노력했다
find . -mindepth 1 -maxdepth 1 ! -name 000-default.conf ! -name default-ssl.conf -print0 |
xargs -0 -I {} sudo mv -- {} $(echo {} | sed 's/local.conf/local.example.com.conf/')
그러나 이것은 작동하지 않습니다.
mv
명령의 두 번째 매개변수가 올바르게 확장되지 않은 것 같습니다 .
답변1
$(...)
쉘은 xargs를 호출하기 전에 이 섹션을 평가합니다. 시도해 볼 수 있는 작업은 다음과 같습니다.
xargs -0 -I {} bash -c 'mv {} $(echo {} | sed "s/local.conf/local.example.com.conf/")'
sed를 피할 수 있습니다
xargs -0 -I {} bash -c 'f="{}"; mv "{}" "${f/local.conf/local.example.com.conf}"'
사용 가능한 경우 명령 도 참조하세요 rename
.
답변2
xargs
그것 없이도 비슷한 것을 쓸 수 있습니다
find . -mindepth 1 -maxdepth 1 ! -name 000-default.conf ! -name default-ssl.conf -exec sh -c '
sudo mv -- "$0" "$(echo "$0" | sed "s/local.conf/local.example.com.conf/")"
'{} \;
바라보다"find ... -exec sh -c '...' sh {} +"를 사용한 find 명령은 어떻게 작동합니까?자세한 내용은.