Поскольку вы новичок в работе с командной строкой, я пройдусь по шагам один за другим, объясняя каждый шаг по ходу дела.
Когда вы откроете терминал/шелл/командную строку, вы увидите командную строку следующего вида:
username:~ $
или что-то подобное. Вы почти наверняка начнете с домашнего каталога, который имеет имя вашего пользователя.
Допустим, две ваши папки с изображениями - folder1
и folder2
. Вы сказали, что они находятся на Рабочем столе, поэтому сначала мы перейдем в каталог Desktop
:
cd Desktop
Команда cd
- это команда "сменить каталог", выполняющая именно то, на что она похожа.
Теперь мы будем использовать команду mv
, которая, конечно же, означает "переместить".
mv -i folder1/* folder2/
Я использовал флаг -i
, который означает "интерактивный", что вызывает появление подсказки каждый раз, когда возникает конфликт имен файлов. Вас спросят, хотите ли вы перезаписать конечный файл или нет.
После этого вам придется вручную разрешить все конфликты*, переименовав файлы, оставшиеся в папке1
, чтобы они не конфликтовали с файлами в папке2
. Наконец, снова выполните приведенную выше команду, но на этот раз конфликтов быть не должно.
После всего этого каталог folder1
должен быть пуст, поэтому удалите его с помощью команды
rmdir folder1
и все готово!
Я действительно рекомендую вам пройти простой учебник по bash, такой как этот, чтобы изучить основы.
folder1
, но я постарался сделать все просто. Как упоминал @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
Это распечатает пары файлов, которые будут перемещены.
#!/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