Linux'ta dosyaları ve klasörleri tekrar tekrar taşıma


74

Düşünmek:

ls -al ../public-back
drwxrwxr-x  4 apache   apache     4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x  2 apache   apache    4096 Apr 19 03:33 content
drwxrwxr-x  2 apache   apache   20480 Apr 20 06:14 images
drwxrwxr-x  2 apache   apache    4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x  4 apache   apache     4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 content
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 images
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 video

/public-back/templatesÖzyinelemeli içerikleri izinlerle birlikte nasıl tekrar taşırım /public/templates?


mv ../public-back/templates/* public / templates /

mv -R ../public-back/templates/* public/templates/Hala soruyu taşımak için oy kullanırdım.

2
mv: geçersiz seçenek - R @Vladislav Zorov

3
cp -a ../public-back/templates/ public /

Yanıtlar:


90

Soruyu yanlış anlamadığım sürece, bu işe yarar:

mv /public-back/templates/* /public/templates

Ayrıca, çok büyük bir dosya listeniz yoksa, ekleme -i, joker karakter kullanırken bazı güvenlik ekleyen herhangi bir şeyin üzerine yazmadan önce sorar *.


14
Bu gizli dosyaları taşımaz.
Arda

2
Gizli dosyaları da taşıyacak şekilde dotglob'u ayarlamak için askubuntu.com/a/259386/358964 adresine bakın .
mkobit

3
Not: Bu, alt dizinlerdeki dosyaların üzerine yazmaz. Bir Directory not emptymesaj alacaksın .
Armstrongest

Dizin hiyerarşisini düzleştirmiş gibi görünüyor. Orijinal klasördeki klasörleri benim için korumadı. Tüm dosyalar, orijinal klasörü aynı yapıya taşımak yerine tam anlamıyla aynı klasörde kaldı.
Robert Noack

Bu çözüm çalışır, ancak bu hatayı görüyorsanız: mv: target '/public/templates' is not a directorysadece manuel hedef klasörü oluşturun: mkdir /public/templates.
Ali Şabdar

8

Cp eyaletleri için man sayfası:

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

Deneyin;

cp -rp /public-back/templates/* /public/templates/

12
mvHareket için ise cp, kopya için ise - anlamsal / etimolojik bir ayrım.
Marius Butuc

cpdaha yavaş mv. cpbilgisayarı diskten RAM'e her şeyi kopyalamaya zorlar ve ardından dosyaların boyutuna bağlı olarak uzun zaman alabilir, tekrar diske yazar. Ancak, mvher zaman anında gerçekleşir , çünkü yalnızca bağlantılar yeniden yazılmalıdır.
tjespe

4

Öğeleri başparmak sürücümden OSMC sistemime taşırken aşağıdakileri çok yararlı buldum:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

Aşağıda nasıl çalıştığı hakkında açıklama.

BTW, kaynak veya hedef dizin adlarındaki boşluklardan önce ters eğik çizgi eklemeyi unutmayın (yukarıya bakın).

find  finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec     Executes a command, in our case mv

-v        Verbose, so you can see what's happening (optional)

{}        is replaced by the name of the found object.

Etkili bir şekilde, tüm dosyaları ve tüm klasörleri buluyor ve bunları birer birer taşıyorsunuz (veya önce bir dizin bulunursa, o dizini ve içindeki içerikleri taşıyorsunuzdur). Bu, her hareket için yeni bir işlem başlatır ve çok verimsizdir. Bunu sadece normal komutlar başarısız olduğunda kullanın.


2

mv bunu yapmıyor gibi görünüyor. Ama bu küçük numarayı kullanabilirsin, çekicilik gibi çalışır:

tar cf - . |(cd /targetdir; tar xvf -)

ve izinleri ve hepsini korur.

Not: Yukarıdakilerin hiçbiri benim için işe yaramadı, bu yüzden bu geçici çözüm.


0
cp -a --link ../public-back/* /public/.  &&  rm -rf ../public-back

Böylece hedef dizinde sert bağlantılar oluşturun ve kaynak dizini kaldırın. 'mv' sizin durumunuzda işe yaramayacak ve genel olarak sadece kaynak dir ve dest hiçbir ortak alt ağaç olmadığında işe yarar.

Unutmayın ki, sorudaki 'hamle' sözcüğü işlemden sonra kaynak dir'in gitmesi gerektiği anlamına geliyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.