ฉันมีหลายชื่อเช่นthat : screenshot 13:25.png
Windows พยายามที่จะเปิดไฟล์เหล่านี้อาจเป็นเพราะ ":"
ฉันจะแทนที่มันได้อย่างไร
ฉันมีหลายชื่อเช่นthat : screenshot 13:25.png
Windows พยายามที่จะเปิดไฟล์เหล่านี้อาจเป็นเพราะ ":"
ฉันจะแทนที่มันได้อย่างไร
คำตอบ:
ในเทอร์มินัลให้cd
เข้าไปในไดเรกทอรีที่ถูกต้องแล้วเรียกใช้
rename 's/\:/-/g' *.png -vn
นี่จะแสดงตัวอย่างการเปลี่ยนชื่อ มันควรเปลี่ยนด้วย:
-
หากดูถูกต้องให้ลบออกn
จากท้ายสุดจากนั้นจะทำการเปลี่ยนชื่อจริง
หมายเหตุ : อูบุนตูเวอร์ชันด้านบน 17.04 ไม่ได้จัดส่งrename
แต่ยังคงมีอยู่ในที่เก็บข้อมูลเริ่มต้นดังนั้นใช้sudo apt install rename
เพื่อรับมัน
n
) ได้อย่างง่ายดาย
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
นี่คือวิธีการทุบตีบริสุทธิ์:
for i in *:*; do
mv "$i" "${i//:/_}"
done
${var//pattern/replacement}
รูปแบบจะแทนที่เกิดขึ้นทั้งหมดpattern
ที่มีในตัวแปรreplacement
$var
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถในการทุบตีของสตริง maipulation ดูที่นี่
หากคุณต้องการทำสิ่งนี้กับตัวละครหลาย ๆ ตัวคุณสามารถวางมันลงในคลาสของตัวละครได้ ดังนั้นสำหรับตัวอย่างเพื่อแทนที่ทั้งหมด;
, :
, =
, +
, %
, ,
ด้วยขีดคุณสามารถทำ:
$ ls
1foo:bar 2foo:bar:baz 3foo;bar 4foo=bar 5foo%bar 6foo,bar 7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar 2foo_bar_baz 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar
โดยทั่วไปความคิดที่ว่าหมายถึง[ ]
any of the characters listed
ดังนั้นโดยการวางอักขระทั้งหมดที่คุณต้องการแทนที่ในคลาสตัวละครอักขระทั้งหมดจะถูกจัดการทันที
สำหรับอักขระเฉพาะที่คุณขอสิ่งต่าง ๆ มีความซับซ้อนกว่าเล็กน้อยเพราะบางตัวต้องถูกหลบหนี (ฉันไม่สนใจ/
เนื่องจาก * ระวังไม่อนุญาตให้ใช้ในชื่อไฟล์มากกว่าที่ Windows ทำดังนั้นจะไม่เป็น ปัญหา):
$ ls
1foo<bar 2foo>bar 3foo:bar 4foo\bar 5foo|bar 6foo*bar 7foo?bar 8foo"bar 9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar 2foo_bar 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar 8foo_bar 9foo_bar
โปรดทราบว่าฉันหนี\
, '
และ"
โดยการเพิ่ม\
ในด้านหน้าของแต่ละ
ถ้าคุณชอบ GUI ให้ติดตั้ง pyrenamer:
sudo apt-get install pyrenamer
จากนั้นเรียกใช้:
pyrenamer
มีหลายสิบตัวเลือกสำหรับรูปแบบและเปลี่ยนชื่อรูปแบบ
ฉันชอบGUIแต่เป็นส่วนเสริม Nautilus, เช่นNautilus Actions Extra :
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(ดูwww.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )
จากนั้นเมื่อคุณเลือกไฟล์ที่จะเปลี่ยนชื่อและคลิกเปลี่ยนชื่อจากเมนูบริบทคุณจะได้รับตัวเลือกมากมายสำหรับการเปลี่ยนชื่อไฟล์
renameutils
แพคเกจมีโปรแกรมที่มีประโยชน์ที่เรียกว่าqmv
ซึ่งมีการเปลี่ยนชื่อชุดการโต้ตอบ คุณเรียกใช้ในไดเรกทอรีหรือรายการไฟล์และสร้างไฟล์ข้อความชั่วคราวที่มีชื่อไฟล์และเริ่มแก้ไขรายการโปรดของคุณ เมื่อคุณออกจากตัวแก้ไขชื่อไฟล์ใด ๆ ที่คุณเปลี่ยนจะถูกเปลี่ยนชื่อตามนั้น qmv
เปลี่ยนปัญหาการเปลี่ยนชื่อแบทช์เป็นปัญหาการแก้ไขข้อความ
ในกรณีนี้คุณสามารถใช้qmv -f do *:*
เพื่อแก้ไขชื่อของไฟล์ทั้งหมดที่มีโคลอนจากนั้น:%s/:/_/g
คำสั่งใน Vim (หรือการค้นหาและแทนที่ที่เกี่ยวข้องในตัวแก้ไขใด ๆ ที่คุณใช้)
-f do
ตัวเลือกชุดรูปแบบของไฟล์ข้อความที่จะมีปลายทางชื่อไฟล์เท่านั้นซึ่งจะทำให้การค้นหาและแทนที่ง่าย รูปแบบเริ่มต้นมีชื่อไฟล์สองชุดในแต่ละบรรทัดและคุณแก้ไขเฉพาะไฟล์ที่สอง ซึ่งช่วยให้สามารถทำสิ่งที่ถูกต้องได้หากคุณลบหรือจัดลำดับบรรทัดใหม่ในไฟล์ แต่ก็ไม่ใช่วิธีที่ง่ายที่สุดเสมอไป มีรูปแบบอื่นด้วย
ด้วยqmv
คุณสามารถเลือกที่จะไพพ์ไฟล์ที่สร้างผ่านคำสั่งที่คุณเลือกเช่นsed
ถ้าคุณไม่ต้องการความสามารถในการโต้ตอบ
และนี่คือสคริปต์ Nautilusที่แทนที่ (ทั้งหมด?) อักขระที่เข้ากันไม่ได้ของ Windows ด้วยเครื่องหมายขีดคั่นในชื่อไฟล์ที่เลือกทั้งหมด (ขึ้นอยู่กับคำตอบของterdon ;-)
#!/bin/bash
filesall=""
while [ $# -gt 0 ]
do
files=`echo "$1" | sed 's/ /\?/g'`
filesall="$files $filesall"
shift
done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done
Thunar (XFCE file-manager) มีคุณสมบัติในการสร้างสำหรับการเปลี่ยนชื่อไฟล์จำนวนมาก มันมีตัวเลือกสำหรับการลบ / แทนที่ตัวอักษรค้นหาและแทนที่หมายเลขไฟล์และอื่น ๆ
ติดตั้ง thunar:
sudo apt-get install thunar
เปิด thunar เรียกดูไฟล์เลือกและเลือก 'เปลี่ยนชื่อ' (ผ่านเมนูบริบทหรือF2)
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit