즉, 다음 형식의 폴더에 중복 파일이 있습니다.
file.ext
file(1).ext
file(2).ext
file(3).ext
otherfile.ext
otherfile(1).ext
otherfile(2).ext
...
다른 폴더 file.ext
로 이동하고 싶습니다 . otherfile.ext
에서 할 수 있나요 bash
?
이게 도움이 될 거라고 생각했는데 awk
?
답변1
존재하다bash:
shopt -s extglob # activates extended pattern matching features
mv !(*\(+([0-9])\)).ext /path/to/target/
정규식은 하나 이상의 숫자 (n).ext
로 끝나지 않는 모든 파일과 일치합니다: .n
+([0-9])
다음을 통해 확인할 수 있습니다 echo
.
echo !(*\(+([0-9])\)).ext
인쇄:
file.ext otherfile.ext
답변2
때에 따라 다르지. 이름에 포함된 파일을 (
무시해야 한다고 가정할 수 있다면 다음과 같이 할 수 있습니다.
shopt -s extglob ## turns on fancy glob patterns
mv !(*\(*) /path/to/target
다음을 포함하는 다른 이름을 사용할 수 있거나 (
해당 중복 파일을 이동해야 하는 경우 다음을 수행할 수 있습니다.
for f in *\(*; do
## Does this file have an original?
[[ -e "${f%%(*}.${f##*.}" ]] &&
## Move the original
mv "${f%%(*}.${f##*.}" /path/to/target;
done
답변3
다음과 같이 시도해 보세요.
$ ls *ext | grep -P '[^)]\.ext' | xargs -iXXxxFILEXXxx mv XXxxFILEXXxx target/
grep
이름에 괄호가 있는 파일은 필터링되고 xargs
결과에 대해 명령이 실행됩니다. 파일 이름을 인수로 사용하는 보기 mv
흉한 태그입니다 .XXxxFILEXXxx
mv