Ubah beberapa nama file dengan mengganti karakter

29

Saya memiliki beberapa file dengan nama that : screenshot 13:25.png
Windows berjuang untuk membuka file-file ini mungkin karena ":".

Bagaimana saya bisa menggantinya?

pengguna236152
sumber
2
Bisakah Anda menerima jawaban untuk menandai bahwa pertanyaan telah diselesaikan? Ini akan sangat membantu pengguna lain.
MERose

Jawaban:

52

Di terminal, cdke direktori yang benar dan kemudian jalankan ini.

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

Ini akan melihat pratinjau penggantian nama. Itu harus diganti :dengan -.

Jika itu terlihat benar, hapus ndari akhir dan kemudian akan melakukan penggantian nama yang sebenarnya.

Catatan : Versi Ubuntu di atas 17,04 tidak disertakan bersama rename, tetapi masih tersedia di repositori default, jadi gunakan sudo apt install renameuntuk mendapatkannya

Oli
sumber
Terima kasih atas jawaban Anda. Saya sudah mencoba dan saya punya masalah ini: Pola pergantian tidak dihentikan pada (eval 1) baris 1.
user236152
@ user236152 Maaf, saya sedikit marah dengan backslash yang melarikan diri (ada di autopilot!). Dihapus pasangan dan itu harus valid sekarang.
Oli
Mungkin Script Nautilus sederhana yang menggantikan semua karakter seperti itu yang dapat menyebabkan masalah di platform lain (berjalan pada semua file yang dipilih) dapat berguna untuk orang "multiplatform".
Sadi
2
Kenapa menggunakannya? Ini menunjukkan kepada Anda apa yang dilakukannya (membuatnya lebih mudah untuk dibalik jika Anda melakukan kesalahan). Kenapa di akhir? Hanya supaya Anda bisa menghapusnya dengan nmudah.
Oli
1
@nightcrawler Anda harus dapat mengaitkan penggantian yang benar-benar terpisah:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli
10

Inilah solusi bash murni:

for i in *:*; do
    mv "$i" "${i//:/_}"
done

The ${var//pattern/replacement}Format akan mengganti semua kejadian dari patterndengan replacementdi variabel $var. Untuk informasi lebih lanjut tentang kemampuan maipulation string bash, lihat di sini .

Jika Anda ingin melakukan ini untuk beberapa karakter, Anda bisa menempatkannya di kelas karakter. Jadi, misalnya, untuk mengganti semua ;, :, =, +, %, ,dengan garis bawah, Anda bisa melakukan:

$ 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

Pada dasarnya, idenya adalah bahwa [ ]cara any of the characters listed. Jadi, dengan menempatkan semua karakter yang ingin Anda ganti di kelas karakter, semuanya ditangani sekaligus.


Untuk karakter spesifik yang Anda minta, beberapa hal sedikit lebih kompleks karena beberapa dari mereka perlu melarikan diri (saya mengabaikan /karena * nix tidak mengizinkannya dalam nama file lebih dari Windows sehingga tidak akan menjadi isu):

$ 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

Perhatikan bahwa saya lolos \, 'dan "dengan menambahkan \di depan masing-masing.

terdon
sumber
Bisakah ini ditingkatkan untuk menggantikan beberapa karakter individu (mis. Semua yang tidak dapat diterima oleh Windows) dengan yang lain?
Sadi
1
@Sadi lihat jawaban yang diperbarui.
terdon
Pada dasarnya ada sembilan: "<>:" / \ | ? * "
Sadi
@Sadi lihat jawaban yang diperbarui.
terdon
Terima kasih, ini bisa membantu membuat Script Nautilus yang membuat nama file yang dipilih kompatibel dengan Windows.
Sadi
2

Jika Anda lebih suka GUI, instal pyrenamer:

sudo apt-get install pyrenamer

Kemudian jalankan:

pyrenamer

Ini memiliki banyak opsi untuk pola dan mengubah nama format.

animaletdesequia
sumber
1

Saya lebih suka GUI tetapi sebagai Ekstensi Nautilus, yaitu Tindakan Nautilus Ekstra :

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

(Lihat www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )

Kemudian ketika Anda memilih file yang akan diganti namanya dan klik Ubah nama dari menu konteks, Anda ditawari banyak opsi untuk mengganti nama file.

Sadi
sumber
0

The renameutilspaket memiliki program yang berguna yang disebut qmvyang menyediakan penggantian nama batch yang interaktif. Anda menjalankannya di direktori atau daftar file, dan itu menghasilkan file teks sementara yang berisi nama file mereka, dan mulai editor favorit Anda. Saat Anda keluar dari editor, nama file apa pun yang Anda ubah diganti namanya. qmvmengubah masalah batch mengubah nama menjadi masalah pengeditan teks.

Dalam hal ini, Anda dapat menggunakan qmv -f do *:*untuk mengedit nama-nama semua file yang mengandung titik dua, dan kemudian :%s/:/_/gperintah di Vim (atau pencarian-dan-ganti yang sesuai di editor apa pun yang Anda gunakan).

The -f dopilihan set format file teks untuk memiliki file tujuan-nama saja, yang membuat pencarian dan mengganti sederhana. Format default memiliki dua salinan nama file di setiap baris, dan Anda hanya mengedit yang kedua. Itu memungkinkan untuk melakukan hal yang benar jika Anda telah menghapus atau memesan ulang baris dalam file, tetapi itu tidak selalu yang termudah. Ada format lain juga.

Dengan qmv, Anda dapat memilih untuk mem-pipe file yang dihasilkan melalui perintah pilihan Anda, seperti sed, jika Anda tidak menginginkan kemampuan interaktif.

Dan Hulme
sumber
0

Dan di sini adalah Script Nautilus yang menggantikan (semua?) Karakter Windows-tidak kompatibel dengan tanda hubung di semua nama file yang dipilih (berdasarkan jawaban oleh 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
Sadi
sumber
0

Thunar (manajer file XFCE) memiliki fitur build in yang bagus untuk penggantian nama file secara massal. Ini memiliki opsi untuk menghapus / mengganti karakter, mencari dan mengganti, menomori file dan banyak lagi.

Instal thunar:

sudo apt-get install thunar

Buka thunar, ramban ke file Anda, pilih dan dan pilih 'rename' (melalui menu konteks atau F2)

pengguna154126
sumber
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
TekWiz2010
sumber
Ini berfungsi dengan baik dan memiliki prompt variabel ... Beri nama file tersebut seperti _ Truncate Last Characters.cmd
TekWiz2010
3
Meskipun ini mungkin benar, ini menggunakan bahasa skrip batch Windows. Kami berada di AskUbuntu, situs untuk pertanyaan terkait Ubuntu, dan karenanya alat yang terkait dengan Ubuntu. Pandangan saya adalah bahwa jawaban ini mungkin tidak sesuai di sini.
Sergiy Kolodyazhnyy
Anda harus menjalankannya melalui Wine tetapi mungkin menjalankannya di Ubuntu ... Ini hanya jawaban yang aneh, ini saja.
Oli