เปลี่ยนชื่อไฟล์หลายรายการโดยแทนที่ตัวละคร


29

ฉันมีหลายชื่อเช่นthat : screenshot 13:25.png
Windows พยายามที่จะเปิดไฟล์เหล่านี้อาจเป็นเพราะ ":"

ฉันจะแทนที่มันได้อย่างไร


2
คุณอาจยอมรับคำตอบเพื่อทำเครื่องหมายคำถามว่าได้รับการแก้ไขแล้วหรือไม่? สิ่งนี้จะช่วยผู้ใช้รายอื่นอย่างมาก
ลด

คำตอบ:


52

ในเทอร์มินัลให้cdเข้าไปในไดเรกทอรีที่ถูกต้องแล้วเรียกใช้

rename 's/\:/-/g' *.png -vn

นี่จะแสดงตัวอย่างการเปลี่ยนชื่อ มันควรเปลี่ยนด้วย:-

หากดูถูกต้องให้ลบออกnจากท้ายสุดจากนั้นจะทำการเปลี่ยนชื่อจริง

หมายเหตุ : อูบุนตูเวอร์ชันด้านบน 17.04 ไม่ได้จัดส่งrenameแต่ยังคงมีอยู่ในที่เก็บข้อมูลเริ่มต้นดังนั้นใช้sudo apt install renameเพื่อรับมัน


ขอบคุณสำหรับคำตอบของคุณฉันพยายามและฉันมีปัญหานี้: รูปแบบการทดแทนไม่สิ้นสุดที่ (Eval 1) บรรทัด 1
user236152

@ user236152 ขออภัยฉันโกรธไปนิดหน่อยกับแบ็กสแลชที่กำลังหลบหนี (อยู่ที่นักบินอัตโนมัติ!) นำคู่รักออกและควรใช้ได้ทันที
Oli

บางทีNautilus Scriptอย่างง่ายที่แทนที่ตัวอักษรดังกล่าวทั้งหมดที่อาจทำให้เกิดปัญหาในแพลตฟอร์มอื่น ๆ (ทำงานในไฟล์ที่เลือกทั้งหมด) อาจมีประโยชน์สำหรับคนที่ "หลายแพลตฟอร์ม"
Sadi

2
ทำไมต้องใช้ มันแสดงให้คุณเห็นสิ่งที่กำลังทำอยู่ (ทำให้ง่ายต่อการย้อนกลับหากคุณทำผิดพลาด) ทำไมในตอนท้าย เพื่อให้คุณสามารถลบ (หรือn) ได้อย่างง่ายดาย
Oli

1
@nightcrawler คุณควรจะสามารถแยกชิ้นส่วนทดแทนได้อย่างสมบูรณ์:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli

10

นี่คือวิธีการทุบตีบริสุทธิ์:

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

โปรดทราบว่าฉันหนี\, 'และ"โดยการเพิ่ม\ในด้านหน้าของแต่ละ


สามารถปรับปรุงเพื่อแทนที่อักขระหลาย ๆ ตัว (เช่นทุกตัวที่ไม่เป็นที่ยอมรับของ Windows) กับผู้อื่นได้หรือไม่?
Sadi

1
@Sadi ดูคำตอบที่ปรับปรุงแล้ว
terdon

โดยทั่วไปมีเก้า: "<>:" / \ | ? * "
Sadi

@Sadi ดูคำตอบที่ปรับปรุงแล้ว
terdon

ขอบคุณสิ่งนี้จะช่วยสร้างNautilus Scriptที่ทำให้ชื่อของไฟล์ที่เลือกเข้ากันได้กับ Windows
Sadi

2

ถ้าคุณชอบ GUI ให้ติดตั้ง pyrenamer:

sudo apt-get install pyrenamer

จากนั้นเรียกใช้:

pyrenamer

มีหลายสิบตัวเลือกสำหรับรูปแบบและเปลี่ยนชื่อรูปแบบ


1

ฉันชอบ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 )

จากนั้นเมื่อคุณเลือกไฟล์ที่จะเปลี่ยนชื่อและคลิกเปลี่ยนชื่อจากเมนูบริบทคุณจะได้รับตัวเลือกมากมายสำหรับการเปลี่ยนชื่อไฟล์


0

renameutilsแพคเกจมีโปรแกรมที่มีประโยชน์ที่เรียกว่าqmvซึ่งมีการเปลี่ยนชื่อชุดการโต้ตอบ คุณเรียกใช้ในไดเรกทอรีหรือรายการไฟล์และสร้างไฟล์ข้อความชั่วคราวที่มีชื่อไฟล์และเริ่มแก้ไขรายการโปรดของคุณ เมื่อคุณออกจากตัวแก้ไขชื่อไฟล์ใด ๆ ที่คุณเปลี่ยนจะถูกเปลี่ยนชื่อตามนั้น qmvเปลี่ยนปัญหาการเปลี่ยนชื่อแบทช์เป็นปัญหาการแก้ไขข้อความ

ในกรณีนี้คุณสามารถใช้qmv -f do *:*เพื่อแก้ไขชื่อของไฟล์ทั้งหมดที่มีโคลอนจากนั้น:%s/:/_/gคำสั่งใน Vim (หรือการค้นหาและแทนที่ที่เกี่ยวข้องในตัวแก้ไขใด ๆ ที่คุณใช้)

-f doตัวเลือกชุดรูปแบบของไฟล์ข้อความที่จะมีปลายทางชื่อไฟล์เท่านั้นซึ่งจะทำให้การค้นหาและแทนที่ง่าย รูปแบบเริ่มต้นมีชื่อไฟล์สองชุดในแต่ละบรรทัดและคุณแก้ไขเฉพาะไฟล์ที่สอง ซึ่งช่วยให้สามารถทำสิ่งที่ถูกต้องได้หากคุณลบหรือจัดลำดับบรรทัดใหม่ในไฟล์ แต่ก็ไม่ใช่วิธีที่ง่ายที่สุดเสมอไป มีรูปแบบอื่นด้วย

ด้วยqmvคุณสามารถเลือกที่จะไพพ์ไฟล์ที่สร้างผ่านคำสั่งที่คุณเลือกเช่นsedถ้าคุณไม่ต้องการความสามารถในการโต้ตอบ


0

และนี่คือสคริปต์ 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

0

Thunar (XFCE file-manager) มีคุณสมบัติในการสร้างสำหรับการเปลี่ยนชื่อไฟล์จำนวนมาก มันมีตัวเลือกสำหรับการลบ / แทนที่ตัวอักษรค้นหาและแทนที่หมายเลขไฟล์และอื่น ๆ

ติดตั้ง thunar:

sudo apt-get install thunar

เปิด thunar เรียกดูไฟล์เลือกและเลือก 'เปลี่ยนชื่อ' (ผ่านเมนูบริบทหรือF2)


0
@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

สิ่งนี้ทำงานได้ดีและมีพรอมต์ตัวแปร ... ตั้งชื่อไฟล์เช่น _ Truncate Last Characters.cmd
TekWiz2010

3
ขณะนี้อาจถูกต้องนี้ใช้ภาษาการเขียนสคริปต์ชุดงาน Windows เราอยู่บน AskUbuntu ไซต์สำหรับคำถามที่เกี่ยวข้องกับ Ubuntu และเครื่องมือที่เกี่ยวข้องกับ Ubuntu มุมมองของฉันคือคำตอบนี้อาจไม่เหมาะสมที่นี่
Sergiy Kolodyazhnyy

คุณต้องเรียกใช้ผ่านทางไวน์แต่อาจเป็นไปได้ที่จะเรียกใช้งานบน Ubuntu ... นี่เป็นเพียงคำตอบที่แปลกประหลาดทั้งหมดนี้
Oli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.