1

Я хочу переименовывать файлы в нескольких подпапках с префиксом (например, переименовывать «file.tif» с «prefix_file.tif») и не обязательно находиться в подпапке.

код: для поиска в /path /to /*; do echo mv "$ f" "PRE_ $ f"; сделанный

дает вам это: mv /path /to /file1 PRE_ /path /to /file1

вместо этого я хочу это: mv /path /to /file1 /path /to /PRE_file1

есть идеи?

3 ответа3

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
2

Используя Bash:

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

Все в одной строке:

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

Первая команда Майка сработала. Я пишу это здесь в одну строку:

для f in /path /to /*; do dir = $(dirname "$ f"); base = $(базовое имя "$ f"); Dest = "$ реж" /"префикс $" "$ база"; echo mv "$ f" "$ dest"; сделанный

Вторая команда Денниса, похоже, имела неправильный вывод: путь / префикс_путь / имя файла вместо пути / префикс_файл

Может быть, это связано с тем, что в именах моих папок есть пробел?

Ой, вот правильная строка:

Префикс = "prefix_"; для f in /path /to /*; do dir = $(dirname "$ f"); base = $(базовое имя "$ f"); Dest = "$ реж" /"префикс $" "$ база"; echo mv "$ f" "$ dest"; сделанный

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .