Đây là của tôi về vấn đề này. Rất nhiều ý tưởng hay đến từ các kịch bản trước đó được đề cập ở đây.
Đây là một kịch bản bash cho OS X . Nó tìm kiếm các tệp tồn tại với cùng tên tệp cơ sở và dng+jpg
phần mở rộng. Nếu a jpg
được tìm thấy có cùng tên chính xác dng
, thì tên tệp đó được hiển thị ( -e
), tệp được di chuyển ( -m
) hoặc bị xóa ( -d
).
Nó sẽ đi qua các thư mục con, vì vậy bạn có thể sử dụng nó cho toàn bộ danh mục của bạn hoặc chỉ một phần của nó.
Đối với các phần mở rộng tệp thô khác, chỉ cần thay thế *.dng
trong tập lệnh bằng phần mở rộng ưa thích của bạn.
Cảnh báo: Bạn có thể có hai hình ảnh khác nhau có cùng tên, nhưng phần mở rộng khác nhau. Đó là những thương vong không thể tránh khỏi của kịch bản này.
Đây là cách sử dụng tập lệnh:
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
Sử dụng cơ bản sẽ hoạt động như thế này:
$ ./dng-jpg.sh -e /Volumes/photo/DNG/2015
Điều đó sẽ lặp lại tất cả tên tệp của jpg
các tệp phù hợp với tiêu chí có cả hai dng
và jpg
tệp có cùng tên.
Kết quả sẽ trông giống như thế này:
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.
Bây giờ nếu tôi muốn xóa các tập tin, tôi sẽ chuyển -e
sang -d
:
$ ./dng-jpg.sh -d /Volumes/photo/DNG/2015
Hoặc nếu tôi muốn di chuyển các tệp đến / trùng lặp, tôi sẽ thực hiện nó với -m
.
$ ./dng-jpg.sh -m /Volumes/photo/DNG/2015
Bây giờ các jpg
tệp trùng lặp sẽ ở trong/Volumes/photo/DNG/2015/duplicates
Đây là kịch bản: 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."