다음은이 문제에 대한 설명입니다. 여기에 언급 된 초기 스크립트에서 많은 좋은 아이디어가 나왔습니다.
이것은 OS X 용 bash 스크립트입니다 . 기본 파일 이름과 dng+jpg
확장자 가 동일한 파일을 찾습니다 . jpg
와 이름이 정확히 동일한 a 가 발견 되면 dng
해당 파일 이름이 표시 ( -e
)되고 파일이 이동 ( -m
)되거나 삭제 ( -d
)됩니다.
하위 폴더를 거치므로 전체 카탈로그 또는 일부에 사용할 수 있습니다.
다른 원시 파일 확장자의 *.dng
경우 스크립트에서 선호하는 확장자로 대체 하십시오.
경고 : 이름은 같지만 확장자가 다른 두 개의 다른 이미지가있을 수 있습니다. 그것들은이 대본의 피할 수없는 사상자입니다.
스크립트를 사용하는 방법은 다음과 같습니다.
Usage: dng-jpg.sh [-m <path>] [-d <path>] [-e <path>] [-h]
-m: for move (moves files to <path>/duplicates)
-d: for delete (deletes duplicate files)
-e: for echo (lists duplicate files)
-h: for help
기본 사용법은 다음과 같습니다.
$ ./dng-jpg.sh -e /Volumes/photo/DNG/2015
동일한 이름을 가진 파일 과 파일 이름 jpg
을 모두 갖는 기준과 일치하는 파일의 모든 파일 이름을 에코합니다 .dng
jpg
결과는 다음과 같습니다.
Echo selected with path: /Volumes/photo/DNG/2015
/Volumes/photo/DNG/2015/03/18/2015-03-18_02-11-17.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-10-50.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-10-56.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-11-39.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-11-54.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-12-26.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-12-43.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-13-21.jpg
/Volumes/photo/DNG/2015/06/01/2015-06-01_05-13-56.jpg
9 files found.
지금은 난 그냥 전환 할 파일 삭제하려는 경우 -e
에를 -d
:
$ ./dng-jpg.sh -d /Volumes/photo/DNG/2015
또는 파일을 / duplicates로 이동하려면을 사용하여 파일을 실행하십시오 -m
.
$ ./dng-jpg.sh -m /Volumes/photo/DNG/2015
이제 중복 jpg
파일은/Volumes/photo/DNG/2015/duplicates
스크립트는 다음과 같습니다. dng-jpg.sh
#!/bin/bash
# Init variables
isSetM=0
isSetD=0
isSetE=0
isSetCount=0
counter=0
#Display usage info
usage() {
cat <<EOF
Usage: dng-jpg.sh [-m <path>] [-d <path>] [-e <path>] [-h]
-m: for move (moves files to <path>/duplicates)
-d: for delete (deletes duplicate files)
-e: for echo (lists duplicate files)
-h: for help
EOF
exit 1
}
#Check for parameters
while getopts ":m:d:e:h" opt; do
case ${opt} in
m)
isSetM=1
let isSetCount="$isSetCount+1"
arg=${OPTARG}
echo "Move selected with path:" $arg
;;
d)
isSetD=1
let isSetCount="$isSetCount+1"
arg=${OPTARG}
echo "Delete selected with path:" $arg
;;
e)
isSetE=1
let isSetCount="$isSetCount+1"
arg=${OPTARG}
echo "Echo selected with path:" $arg
;;
h)
let isSetCount="$isSetCount+1"
usage
;;
\?)
echo "Invalid option: -$OPTARG" >&2
usage
;;
:)
echo "Option -$OPTARG requires a directory argument." >&2
usage
;;
*)
usage
;;
esac
done
# If no parameters, show usage help and exit
if test -z "$1"; then
usage
fi
# If multiple parameters (not counting -a), show usage help and exit
if (($isSetCount > 1)); then
usage
fi
#Verify directory
if [ ! -d "$arg" ]; then
echo "$arg is not a path to a directory." >&2
usage
fi
#Now set it as a basedir
BASEDIR=$arg
WASTEDIR="$BASEDIR/duplicates/"
if (( $isSetM==1 )); then
mkdir $WASTEDIR
fi
for filename in $(find $BASEDIR -name '*.dng' -exec echo {} \; | sort); do
prefix=${filename%.dng}
if [ -e "$prefix.jpg" ]; then
let counter="$counter+1"
if (( $isSetE==1 )); then
echo "$prefix.jpg"
fi
if (( $isSetM==1 )); then
mv $prefix.jpg $WASTEDIR
fi
if (( $isSetD==1 )); then
rm $prefix.jpg
fi
fi
done
echo "$counter files found."