Просто скопіюйте відразу декілька файлів з командного рядка
Ви можете досягти цього кількох способів. Найпростіше, що я бачив - це використовувати наступне.
cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/
У синтаксисі використовується команда cp, за якою слідує шлях до каталогу, до якого знаходяться потрібні файли з усіма файлами, які ви бажаєте скопіювати, загорнуті в дужки та розділені комами.
Не забудьте зазначити, що між файлами немає пробілів. Остання частина команди, /home/usr/destination/
- це каталог, в який потрібно скопіювати файли.
або якщо всі файли мають один префікс, але різні закінчення, ви можете зробити щось подібне:
cp /home/usr/dir/file{1..4} ./
Куди будуть скопійовані файл1, файл2, файл3 та файл4.
З того, як ви сформулювали питання, я вважаю, що це те, що ви шукаєте, але це також звучить так, що ви можете шукати команду для читання зі списку файлів і копіювати їх у певний каталог. Якщо це так, дайте мені знати, і я відредагую свою відповідь.
Справа з дублікатами з пітона
Тому я написав невеликий сценарій пітона, який, на мою думку, повинен виконати роботу. Однак я не впевнений, наскільки ви добре розбираєтесь у python (якщо він взагалі розбирається), тож я спробую пояснити, як використовувати цей сценарій найкращим чином, і, будь ласка, задайте стільки запитань щодо нього, скільки вам потрібно.
import os,sys,shutil
### copies a list of files from source. handles duplicates.
def rename(file_name, dst, num=1):
#splits file name to add number distinction
(file_prefix, exstension) = os.path.splitext(file_name)
renamed = "%s(%d)%s" % (file_prefix,num,exstension)
#checks if renamed file exists. Renames file if it does exist.
if os.path.exists(dst + renamed):
return rename(file_name, dst, num + 1)
else:
return renamed
def copy_files(src,dst,file_list):
for files in file_list:
src_file_path = src + files
dst_file_path = dst + files
if os.path.exists(dst_file_path):
new_file_name = rename(files, dst)
dst_file_path = dst + new_file_name
print "Copying: " + dst_file_path
try:
shutil.copyfile(src_file_path,dst_file_path)
except IOError:
print src_file_path + " does not exist"
raw_input("Please, press enter to continue.")
def read_file(file_name):
f = open(file_name)
#reads each line of file (f), strips out extra whitespace and
#returns list with each line of the file being an element of the list
content = [x.strip() for x in f.readlines()]
f.close()
return content
src = sys.argv[1]
dst = sys.argv[2]
file_with_list = sys.argv[3]
copy_files(src,dst,read_file(file_with_list))
Цей сценарій повинен бути відносно простим у використанні. Спочатку скопіюйте вищевказаний код у програму gedit (попередньо слід встановити в Ubuntu) або будь-який інший текстовий редактор.
Після цього збережіть файл як move.py у своєму домашньому каталозі (це може бути будь-який каталог, але для зручності навчання можна просто скористатись домашнім каталогом) або додати каталог, який міститься у вашому PATH. Потім cd
у свій домашній каталог (або в інший каталог, в якому ви зберегли move.py), з терміналу і введіть таку команду:
python move.py /path/to/src/ /path/to/dst/ file.txt
При цьому слід скопіювати всі файли, які перераховані з вихідного каталогу в каталог призначення, з дублікатами формату pic (1) .jpg, pic (2) .jpg тощо.
file.txt має бути файлом, у якому перераховані всі зображення, які ви хочете скопіювати, з кожним записом, в окремому окремому рядку.
Ні в якому разі цей скрипт не повинен впливати на вихідний каталог, однак просто переконайтеся, що ви вводите правильні шляхи до каталогу джерела та місця призначення, і найгірше, що може статися, - це скопіювати файли в неправильний каталог.
Примітки
- Цей сценарій передбачає, що всі початкові зображення є в одному каталозі. Якщо ви хочете, щоб він також перевіряв підкаталоги, сценарій потрібно буде змінити.
- Якщо ви випадково ввели ім’я файлу, скрипт виплюне помилку
"файл не існує" і запропонує "натиснути Enter", щоб продовжити, і сценарій продовжить копіювати решту списку.
- Не забувайте про тривалість
/
як шляху до вихідного
каталогу, так і шляху до каталогу призначення. Інакше скрипт поверне вам помилку.
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
деp
призначено для копіювання дозволу на папку.