Bash - 调整脚本以用数字重命名文件
Bash - Adapting script to rename files with numbers
我有这个脚本
rename_files() {
title="${1##* - }"
for filename in "/"*.*; do
case "${filename##*.}" in
ext1|ext2|ext3)
mkdir "/User/Downloaded/${title}"
new_path="/User/Downloaded/${title}/${title}.${filename##*.}"
echo "moving $filename -> $new_path"
mv "$filename" "$new_path"
;;
esac
done
}
rename_category() {
for path in "/User/Downloads/"*; do
rename_files "$path" ""
done
}
rename_category CAT1
rename_category CAT2
这样做
之前
.
├── Downloads
│ ├── CAT1 - Something ── File.ext1
│ └── CAT2 - SomethingElse ── OtherFile.ext1
├── Downloaded
├── CAT1
├── CAT2
之后
.
├── Downloads
│ ├── CAT1 - Something
│ └── CAT2 - SomethingElse
├── Downloaded
├── CAT1 ── Something ── Something.ext1
├── CAT2 ── SomethingElse ── SomethingElse.ext1
我想做的是,如果只有一个文件具有相同的扩展名,那么这些文件将被重命名,添加 _1
,等等
之前
.
├── Downloads
│ ├── CAT1 - Something ├── File.ext1
├── ExampleFile.ext1
│ └── CAT2 - SomethingElse ── OtherFile.ext1
├── Downloaded
├── CAT1
├── CAT2
之后
.
├── Downloads
│ ├── CAT1 - Something
│ └── CAT2 - SomethingElse
├── Downloaded
├── CAT1 ── Something ── Something_1.ext1
── Something_2.ext1
├── CAT2 ── SomethingElse ── SomethingElse.ext1
编辑:
#!/bin/bash
rename_files() {
title="${1##* - }"
for filename in "/"*.*; do
case "${filename##*.}" in
doc|ext|ext)
mkdir "/User/Downloaded/${title}"
new_path="/User/Downloaded/${title}/${title}.${filename##*.}"
let "iters=1"
while [ -f $new_path ] ; do
$new_path=$new_path"$iters"
let "iters++"
done
echo "moving $filename -> $new_path"
mv "$filename" "$new_path"
;;
esac
done
}
rename_category() {
for path in "/User/Downloads/"*; do
rename_files "$path" ""
done
}
rename_category CAT1
EDIT2:
/User/Downloads/DOC - TEST
中有两个.doc
个文件
/User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc
/Sample-doc-file-200kb.doc
我要的是
/User/Downloaded/TEST/TEST_1.doc
/TEST_2.doc
这是输出日志
chmod +x /User/TEST.sh
sh /User/TEST.sh
moving /User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc -> /User/Downloaded/TEST/TEST.doc
mkdir: /User/Downloaded/TEST: File exists
/User/TEST.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc1: No such file or directory
/User/TEST.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc2: No such file or directory
等等
更新输出日志
sh /User/Script.sh
moving /User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc -> /User/Downloaded/TEST/TEST.doc
mv: rename {/User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc} to {/User/Downloaded/TEST/TEST.doc}: No such file or directory
mkdir: /User/Downloaded/TEST: File exists
moving /User/Downloads/DOC - TEST/Sample-doc-file-200kb.doc -> /User/Downloaded/TEST/TEST.doc
mv: rename {/User/Downloads/DOC - TEST/Sample-doc-file-200kb.doc} to {/User/Downloaded/TEST/TEST.doc}: No such file or directory
输出已更新:
这是我的初始情况
User/Downloads/DOC - TEST/SampleDoc.doc
/OtherSampleDoc.doc
/OtherDoc.doc
User/Downloaded/
脚本后我只得到
User/Downloads/DOC - TEST/OtherSampleDoc.doc
/OtherDoc.doc
User/Downloaded/TEST/TEST.doc
但我想要的是
User/Downloads/DOC - TEST
User/Downloaded/TEST/TEST_1.doc
/TEST_2.doc
/TEST_3.doc
这是输出
sh /User/Script.sh
moving /User/Downloads/DOC - TEST/OtherDoc.doc -> /User/Downloaded/TEST/TEST.doc
mkdir: /User/Downloaded/TEST: File exists
/User/Script.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc1: No such file or directory
/User/Script.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc2: No such file or directory
/User/Script.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc3: No such file or directory
etc.
rename_files() {
title="${1##* - }"
for filename in "/"*.*; do
case "${filename##*.}" in
ext1|ext2|ext3)
mkdir "/User/Downloaded/${title}"
new_path="/User/Downloaded/${title}/${title}.${filename##*.}"
let "iters=1"
while [ -f $new_path ] ; do
new_path=$new_path"$iters"
let "iters++"
done
echo "moving $filename -> $new_path"
mv "${filename}" "${new_path}"
;;
esac
done
}
我有这个脚本
rename_files() {
title="${1##* - }"
for filename in "/"*.*; do
case "${filename##*.}" in
ext1|ext2|ext3)
mkdir "/User/Downloaded/${title}"
new_path="/User/Downloaded/${title}/${title}.${filename##*.}"
echo "moving $filename -> $new_path"
mv "$filename" "$new_path"
;;
esac
done
}
rename_category() {
for path in "/User/Downloads/"*; do
rename_files "$path" ""
done
}
rename_category CAT1
rename_category CAT2
这样做
之前
.
├── Downloads
│ ├── CAT1 - Something ── File.ext1
│ └── CAT2 - SomethingElse ── OtherFile.ext1
├── Downloaded
├── CAT1
├── CAT2
之后
.
├── Downloads
│ ├── CAT1 - Something
│ └── CAT2 - SomethingElse
├── Downloaded
├── CAT1 ── Something ── Something.ext1
├── CAT2 ── SomethingElse ── SomethingElse.ext1
我想做的是,如果只有一个文件具有相同的扩展名,那么这些文件将被重命名,添加 _1
,等等
之前
.
├── Downloads
│ ├── CAT1 - Something ├── File.ext1
├── ExampleFile.ext1
│ └── CAT2 - SomethingElse ── OtherFile.ext1
├── Downloaded
├── CAT1
├── CAT2
之后
.
├── Downloads
│ ├── CAT1 - Something
│ └── CAT2 - SomethingElse
├── Downloaded
├── CAT1 ── Something ── Something_1.ext1
── Something_2.ext1
├── CAT2 ── SomethingElse ── SomethingElse.ext1
编辑:
#!/bin/bash
rename_files() {
title="${1##* - }"
for filename in "/"*.*; do
case "${filename##*.}" in
doc|ext|ext)
mkdir "/User/Downloaded/${title}"
new_path="/User/Downloaded/${title}/${title}.${filename##*.}"
let "iters=1"
while [ -f $new_path ] ; do
$new_path=$new_path"$iters"
let "iters++"
done
echo "moving $filename -> $new_path"
mv "$filename" "$new_path"
;;
esac
done
}
rename_category() {
for path in "/User/Downloads/"*; do
rename_files "$path" ""
done
}
rename_category CAT1
EDIT2:
/User/Downloads/DOC - TEST
.doc
个文件
/User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc
/Sample-doc-file-200kb.doc
我要的是
/User/Downloaded/TEST/TEST_1.doc
/TEST_2.doc
这是输出日志
chmod +x /User/TEST.sh
sh /User/TEST.sh
moving /User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc -> /User/Downloaded/TEST/TEST.doc
mkdir: /User/Downloaded/TEST: File exists
/User/TEST.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc1: No such file or directory
/User/TEST.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc2: No such file or directory
等等
更新输出日志
sh /User/Script.sh
moving /User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc -> /User/Downloaded/TEST/TEST.doc
mv: rename {/User/Downloads/DOC - TEST/Sample-doc-file-100kb.doc} to {/User/Downloaded/TEST/TEST.doc}: No such file or directory
mkdir: /User/Downloaded/TEST: File exists
moving /User/Downloads/DOC - TEST/Sample-doc-file-200kb.doc -> /User/Downloaded/TEST/TEST.doc
mv: rename {/User/Downloads/DOC - TEST/Sample-doc-file-200kb.doc} to {/User/Downloaded/TEST/TEST.doc}: No such file or directory
输出已更新:
这是我的初始情况
User/Downloads/DOC - TEST/SampleDoc.doc
/OtherSampleDoc.doc
/OtherDoc.doc
User/Downloaded/
脚本后我只得到
User/Downloads/DOC - TEST/OtherSampleDoc.doc
/OtherDoc.doc
User/Downloaded/TEST/TEST.doc
但我想要的是
User/Downloads/DOC - TEST
User/Downloaded/TEST/TEST_1.doc
/TEST_2.doc
/TEST_3.doc
这是输出
sh /User/Script.sh
moving /User/Downloads/DOC - TEST/OtherDoc.doc -> /User/Downloaded/TEST/TEST.doc
mkdir: /User/Downloaded/TEST: File exists
/User/Script.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc1: No such file or directory
/User/Script.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc2: No such file or directory
/User/Script.sh: line 12: /User/Downloaded/TEST/TEST.doc=/User/Downloaded/TEST/TEST.doc3: No such file or directory
etc.
rename_files() {
title="${1##* - }"
for filename in "/"*.*; do
case "${filename##*.}" in
ext1|ext2|ext3)
mkdir "/User/Downloaded/${title}"
new_path="/User/Downloaded/${title}/${title}.${filename##*.}"
let "iters=1"
while [ -f $new_path ] ; do
new_path=$new_path"$iters"
let "iters++"
done
echo "moving $filename -> $new_path"
mv "${filename}" "${new_path}"
;;
esac
done
}