Kode LINUX untuk mengganti nama file dengan awalan dalam subfolder

1

Saya ingin mengganti nama file dalam beberapa subfolder dengan awalan (mis., Ganti nama "file.tif" dengan "prefix_file.tif") dan tidak harus berada dalam subfolder.

kode: untuk f di / path / ke / *; lakukan echo mv "$ f" "PRE_ $ f"; Selesai

memberi Anda ini: mv / path / ke / file1 PRE_ / path / ke / file1

sebagai gantinya saya menginginkan ini: mv / path / ke / file1 / path / ke / PRE_file1

ada ide?

Sebastian
sumber

Jawaban:

2
prefix="prefix_"
for file in /path/to/*; do
    dir=$(dirname "$file")
    base=$(basename "$file")
    dest="$dir"/"$prefix""$base"
    echo mv "$file" "$dest"  # remove "echo" after testing
done
Mikel
sumber
2

Menggunakan Bash:

for f in /path/to/*
do 
    dir="${f%/*}"
    echo mv "$f" "$dir/PRE_${f/$a\/}"
done

Semua dalam satu baris:

for f in /path/to/*; do dir="${f%/*}"; echo mv "$f" "$dir/PRE_${f/$a\/}"; done
Dennis Williamson
sumber
0

Perintah pertama oleh Mike berhasil. Saya menulisnya di sini dalam satu baris:

untuk f di / path / ke / *; do dir = $ (dirname "$ f"); base = $ (basename "$ f"); dest = "$ dir" / "$ awalan" "$ base"; echo mv "$ f" "$ dest"; Selesai

Perintah kedua oleh Dennis tampaknya memiliki output yang salah: path / prefix_path / filename alih-alih path / prefix_filename

Bisa jadi itu ada hubungannya dengan fakta bahwa nama folder saya memiliki ruang di dalamnya?

Ups, berikut ini satu baris yang benar:

prefix = "prefix_"; untuk f di / path / ke / *; do dir = $ (dirname "$ f"); base = $ (basename "$ f"); dest = "$ dir" / "$ awalan" "$ base"; echo mv "$ f" "$ dest"; Selesai

Sebastian
sumber