เพียงคัดลอกหลายไฟล์พร้อมกันจากบรรทัดคำสั่ง
มีหลายวิธีที่คุณสามารถทำได้ วิธีที่ง่ายที่สุดที่ฉันเคยเห็นคือใช้สิ่งต่อไปนี้
cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/
ไวยากรณ์ใช้คำสั่ง cp ตามด้วยพา ธ ไปยังไดเร็กทอรีที่ไฟล์ที่ต้องการอยู่ในไฟล์ทั้งหมดที่คุณต้องการคัดลอกในวงเล็บและคั่นด้วยเครื่องหมายจุลภาค
ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างระหว่างไฟล์ ส่วนสุดท้ายของคำสั่ง/home/usr/destination/
คือไดเรกทอรีที่คุณต้องการคัดลอกไฟล์ลงใน
หรือถ้าไฟล์ทั้งหมดมีคำนำหน้าเหมือนกัน แต่ตอนจบแตกต่างกันคุณสามารถทำสิ่งนี้:
cp /home/usr/dir/file{1..4} ./
โดยที่ file1, file2, file3 และ file4 จะถูกคัดลอก
จากวิธีที่คุณพูดคำถามที่ฉันเชื่อว่านี่คือสิ่งที่คุณกำลังมองหา แต่ดูเหมือนว่าคุณอาจกำลังมองหาคำสั่งให้อ่านจากรายการของไฟล์และคัดลอกทั้งหมดไปยังไดเรกทอรีที่แน่นอน หากเป็นกรณีนี้ให้ฉันทราบและฉันจะแก้ไขคำตอบของฉัน
การจัดการกับรายการซ้ำด้วย 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
มีไว้สำหรับคัดลอกสิทธิ์โฟลเดอร์