Wystarczy skopiować wiele plików jednocześnie z wiersza polecenia
Można to osiągnąć na kilka sposobów. Najłatwiejsze, jakie widziałem, to skorzystanie z poniższych.
cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/
Składnia używa polecenia cp, a następnie ścieżki do katalogu, w którym znajdują się żądane pliki, a wszystkie pliki, które chcesz skopiować, są owinięte w nawiasy i oddzielone przecinkami.
Pamiętaj, że między plikami nie ma spacji. Ostatnia część polecenia, /home/usr/destination/
to katalog, do którego chcesz skopiować pliki.
lub jeśli wszystkie pliki mają ten sam prefiks, ale różne zakończenia, możesz zrobić coś takiego:
cp /home/usr/dir/file{1..4} ./
Gdzie plik 1, plik 2, plik 3 i plik 4 zostaną skopiowane.
Z tego, jak sformułowałeś pytanie, uważam, że tego właśnie szukasz, ale brzmi to również tak, jakbyś szukał polecenia do odczytania z listy plików i skopiowania ich wszystkich do określonego katalogu. W takim przypadku daj mi znać, a ja zmienię odpowiedź.
Radzenie sobie z duplikatami za pomocą Pythona
Napisałem więc mały skrypt Pythona, który moim zdaniem powinien wykonać zadanie. Nie jestem jednak pewien, jak dobrze znasz język Python (jeśli w ogóle), więc postaram się wyjaśnić, jak najlepiej korzystać z tego skryptu i zadaj tyle pytań, ile potrzebujesz.
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))
Ten skrypt powinien być stosunkowo prosty w użyciu. Najpierw skopiuj powyższy kod do programu gedit (powinien być preinstalowany w Ubuntu) lub w dowolnym innym edytorze tekstu.
Po zakończeniu zapisz plik jako move.py w swoim katalogu domowym (może to być dowolny katalog, ale dla ułatwienia instrukcji, po prostu skorzystaj z katalogu domowego) lub dodaj katalog, w którym znajduje się plik do ŚCIEŻKI. Następnie cd
przejdź do katalogu domowego (lub innego katalogu, w którym zapisałeś move.py in) z terminala i wpisz następującą komendę:
python move.py /path/to/src/ /path/to/dst/ file.txt
Powinno to skopiować wszystkie pliki z katalogu źródłowego do katalogu docelowego z duplikatami w formacie pic (1) .jpg, pic (2) .jpg i tak dalej.
plik.txt powinien być plikiem, który zawiera listę wszystkich zdjęć, które chcesz skopiować, z każdym wpisem w osobnym wierszu.
Skrypt ten w żaden sposób nie powinien wpływać na katalog źródłowy, jednak po prostu upewnij się, że wprowadzasz prawidłowe ścieżki do katalogu źródłowego i docelowego, a najgorsze, co może się zdarzyć, to skopiowanie plików do niewłaściwego katalogu.
Notatki
- Ten skrypt zakłada, że wszystkie oryginalne obrazy znajdują się w tym samym katalogu. Jeśli chcesz, aby sprawdził także podkatalogi, skrypt będzie musiał zostać zmodyfikowany.
- Jeśli przez pomyłkę wpiszesz nazwę pliku, skrypt wypluje błąd
„plik nie istnieje” i wyświetli monit o naciśnięcie „enter”, aby kontynuować, a skrypt będzie kontynuował kopiowanie reszty listy.
- Nie zapomnij o końcowej
/
ścieżce zarówno do
katalogu źródłowego, jak i ścieżki do katalogu docelowego. W przeciwnym razie skrypt wypluje ci błąd.
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
gdziep
jest do kopiowania uprawnień do folderu.