Изрязване, копиране и поставяне са част от ежедневния компютърен живот.
В предишната глава научихте за копирането на файлове и папки (директории) в терминала.
В тази част от поредицата Основи на терминала ще научите за операцията изрязване и поставяне (преместване) в терминала на Linux.
Преместване или изрязване-поставяне?
Добре! Изрязване-поставяне не е правилният технически термин тук. Нарича се преместване на файлове (и папки).
Тъй като не сте запознати с командния ред, може да намерите термина „преместване“ за объркващ.
Когато копирате файл на друго място с помощта на командата cd, изходният файл остава на същото място.
Когато преместите файл на друго място с помощта на командата mvизходният файл вече не остава в първоначалното местоположение.
Това е същата операция за изрязване и поставяне (Ctrl+X и Ctrl+V), която правите в графичен файлов мениджър.
📋
По принцип преместването на файлове в командния ред може да се смята за същото като изрязване-поставяне в графична среда.
Преместване на файлове
Linux има специална команда mv (съкратено от move) за преместване на файлове и директории на други места.
А използването на командата mv е доста просто:
mv source_file destination_directory
Тук също играе ролята на пътя. Можете да използвате абсолютния или относителния път. Което отговаря на вашите нужди.
Нека видим това с пример. Трябва да практикувате заедно с него, като копирате примерните сценарии на вашата система.
Това е структурата на директорията в примера:
[email protected]:~/moving_files$ tree
.
├── dir1
│ ├── file_2
│ └── file_3
├── dir2
│ └── passwd
├── dir3
├── file_1
├── file_2
├── file_3
├── file_4
├── passwd
└── services
3 directories, 9 files
Сега, да кажем, че искам да преместя file_1
да се dir3
.
mv file_1 dir3

Преместване на множество файлове
Можете да преместите няколко файла на друго място в една и съща команда mv:
mv file1 file2 fileN destination_directory
Нека продължим нашия примерен сценарий за преместване на множество файлове.
mv file_2 file_3 file_4 dir3

🖥️
Преместете файловете обратно в текущата директория от dir3
. Имаме нужда от тях в следващите примери.
Премествайте файлове с повишено внимание
Ако дестинацията вече има файлове със същото име, дестинационните файлове ще бъдат заменени незабавно. Понякога няма да искате това.
Подобно на командата cp, командата mv също има интерактивен режим с опция -i
.
И целта е същата. Поискайте потвърждение, преди да замените файловете на местоназначението.
[email protected]:~/moving_files$ mv -i file_3 dir1
mv: overwrite 'dir1/file_3'?
Можете да натиснете N, за да откажете замяната и Y или Enter, за да замените целевия файл.

Преместете, но само актуализирайте
Командата mv идва с някои специални опции. Една от тях е опцията за актуализиране -u
.
С това целевият файл ще бъде заменен само ако преместваният файл е по-нов от него.
mv -u file_name destination_directory
Ето един пример. file_2 беше променен в 10:39 и file_3 беше променен в 10:06.
[email protected]:~/moving_files$ ls -l file_2 file_3
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_2
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:06 file_3
В целевата директория dir1, file_2 е променен последно в 10:37 и file_3 е променен в 10:39.
[email protected]:~/moving_files$ ls -l dir1
total 0
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:37 file_2
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_3
С други думи, в целевата директория file_2 е по-стар, а file_3 е по-нов от тези, които се преместват.
Това също означава, че file_3 няма да ме премести, докато file_2 ще бъде актуализиран. Можете да го проверите с времевите марки на файловете в целевата директория, след като изпълните командата mv.
[email protected]:~/moving_files$ mv -u file_2 file_3 dir1
[email protected]:~/moving_files$ ls -l dir1
total 0
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_2
-rw-rw-r-- 1 abhishek abhishek 0 Apr 4 10:39 file_3
[email protected]:~/moving_files$ date
Tue Apr 4 10:41:16 AM IST 2023
[email protected]:~/moving_files$
Както можете да видите, командата за преместване е изпълнена в 10:41 и само клеймото за време на file_2 е променено.

💡
Можете също да използвате резервната опция -b
. Ако целевият файл се заменя, той автоматично ще създаде резервно копие с filename~
модел.
Отстраняване на неизправности: Целта не е директория
Ако премествате няколко файла, последният аргумент трябва да е директория. В противен случай ще срещнете тази грешка:
target is not a directory
Тук създавам файл с име dir
. Името звучи като директория, но е файл. И когато се опитам да преместя няколко файла в него, очевидната грешка е там:

Но какво ще стане, ако преместите един файл в друг файл? В този случай целевият файл се заменя със съдържанието на изходния файл, докато изходният файл се преименува като целеви файл. Повече за това в следващите раздели.
Преместване на директории
Досега сте видели всичко за преместването на файлове. Какво ще кажете за преместване на директории?
Командите cp и rm използваха recusrive опция -r съответно за копиране и изтриване на папки.
Въпреки това, няма такова изискване за командата mv. Можете да използвате командата mv за преместване на директории.
mv dir target_directory
Ето един пример, където премествам dir2
директория към dir3
. И както виждате, dir2
заедно със съдържанието му се премества в dir3
.

Можете да местите множество директории по същия начин.
Преименувайте файлове и директории
Ако искате да преименувате файл или директория, можете да използвате същата команда mv.
mv filename new_name_in_same_or_new_location
Да приемем, че искате да преименувате файл на същото място. Ето един пример, в който преименувам file_1
да се file_one
в същата директория.

Можете също да премествате и преименувате файловете. Просто трябва да предоставите пътя на директорията и името на файла на дестинацията. Ето, преименувам services
файл към my_services
докато го премествате към dir3
.
[email protected]:~/moving_files$ ls
dir dir1 dir3 file_2 file_3 file_one passwd services
[email protected]:~/moving_files$ mv services dir3/my_services
[email protected]:~/moving_files$ ls dir3
dir2 my_services
📋
Не можете да преименувате няколко файла директно с командата mv. Трябва да го комбинирате с други команди като намиране и т.н.
Тествайте знанията си
Време е да практикувате това, което току-що сте научили.
Създайте нова папка, за да практикувате упражнението. Тук създайте структура на директория като тази:
.
├── dir1
├── dir2
│ ├── dir21
│ ├── dir22
│ └── dir23
└── dir3
Копирайте файла /etc/passwd в текущата директория. Сега го преименувайте secrets
.
Направете три нови файла с имена file_1
, file_2
и file_3
. Преместете всички файлове в dir22
.
Сега преместете dir22
директория към dir3
.
Изтрийте цялото съдържание на dir2
сега.
В предпоследната глава от поредицата Основи на терминала ще научите за редактирането на файлове в терминала. Останете на линия.
Публикациите се превеждат автоматично с google translate