Удалить, затем переименовать: те же имены файлов Различные расширения

Поскольку вы новичок в работе с командной строкой, я пройдусь по шагам один за другим, объясняя каждый шаг по ходу дела.

Когда вы откроете терминал/шелл/командную строку, вы увидите командную строку следующего вида:

username:~ $ 

или что-то подобное. Вы почти наверняка начнете с домашнего каталога, который имеет имя вашего пользователя.

Допустим, две ваши папки с изображениями - folder1 и folder2. Вы сказали, что они находятся на Рабочем столе, поэтому сначала мы перейдем в каталог Desktop:

cd Desktop

Команда cd - это команда "сменить каталог", выполняющая именно то, на что она похожа.

Теперь мы будем использовать команду mv, которая, конечно же, означает "переместить".

mv -i folder1/* folder2/

Я использовал флаг -i, который означает "интерактивный", что вызывает появление подсказки каждый раз, когда возникает конфликт имен файлов. Вас спросят, хотите ли вы перезаписать конечный файл или нет.

После этого вам придется вручную разрешить все конфликты*, переименовав файлы, оставшиеся в папке1, чтобы они не конфликтовали с файлами в папке2. Наконец, снова выполните приведенную выше команду, но на этот раз конфликтов быть не должно.

После всего этого каталог folder1 должен быть пуст, поэтому удалите его с помощью команды

rmdir folder1

и все готово!

Я действительно рекомендую вам пройти простой учебник по bash, такой как этот, чтобы изучить основы.

  • Обратите внимание, что, конечно, можно решить конфликт имен программно, переименовав каждый из файлов в folder1, но я постарался сделать все просто.

0
12.11.2018, 09:03
2 ответа

Как упоминал @roaima, вам не нужно сначала удалять файлы, при перемещении файлов вы автоматически перезапишете старые файлы.

Один из подходов к этому — использовать цикл for в bash:

for f in *.jpg.txt; do mv $f ${f/%.jpg.txt/.txt}; done

Поясню:

  • for f in *.jpg.txt; do <command>; done:Выполнить команду для каждого файла из *.jpg.txt. При выполнении имя файла сохраняется в переменной f.
  • ${f/%.jpg.txt/.txt}:Значение $f, но последнее вхождение .jpg.txtзаменено на .txt. См.https://www.tldp.org/LDP/abs/html/parameter-substitution.htmlдля получения дополнительных примеров этого.
  • mv $f ${f/%.jpg.txt/.txt}:Сделайте переименование старого файла в новое имя файла без .jpg.

Прежде чем запускать этот код, вы можете убедиться, что он будет работать правильно, запустив

for f in *.jpg.txt; do echo $f ${f/%.jpg.txt/.txt}; done

Это распечатает пары файлов, которые будут перемещены.

2
28.01.2020, 02:41
#!/bin/bash

## to remove ".txt" files

# this will keep the files which removing in txt
# you can see delete file on the script path
ls -lrth | grep ".txt" | grep -v "jpg" | awk -F' ' {'print $9'} > delete
terminal=`tty`
exec < ${delete=delete}
        while read line
        do
                rm -rf $line
        done
exec < $terminal


## Renaming the files
# this will keep the files which we are renaming
# you can see rename file on the script path
ls -lrth | grep -i "jpg" | awk -F' ' {'print $9'} > rename 
terminal=`tty`
exec < ${rename=rename}
        while read line
        do
                nn=`echo $line | sed 's/.jpg//gi'`
                mv $line $nn
        done
exec < $terminal
-1
28.01.2020, 02:41

Теги

Похожие вопросы