Komut satırını kullanarak tüm dosyaları bir klasörden diğerine nasıl taşırım?


245

Tüm dosyaları bir klasörden komut satırına sahip başka bir klasöre nasıl taşıyabileceğimi bilmek istiyorum.

Diyelim ki İndirilenler klasörümdeyim ve tüm dosyaların adını yazmak zorunda kalmadan, Videolar klasörüme taşımak istediğim 100 dosya var.


Sen taşınmayı soruyorsun filesama insanlar nasıl sadece geçmenize gösteren filesama foldersaynı zamanda. Bu iyi mi?
Askar

2
@ Hontvári Levente bir yıl önce, en iyi, temiz, basit ve işe yarayan gibi görünen bir cevap verdi. Peki nasıl sadece 3 oy aldı (şu anda tepedeki cevap için 262 ile karşılaştırıldığında)?
Ray Butterworth,

Yanıtlar:


331

Bir terminal açın ve bu komutu çalıştırın:

mv  -v ~/Downloads/* ~/Videos/

Tüm dosya ve klasörleri İndirilenler klasöründen Videolar klasörüne taşıyacaktır.


Tüm dosyaları taşımak, ancak klasörleri taşımak için:

Tüm dosyaları (ancak klasörleri değil) Yüklemeler klasöründen Videolar klasörüne taşımak istiyorsanız, bu komutu kullanın.

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Yalnızca dosyaları İndirme klasörlerinden taşımak, ancak alt klasörlerden taşımak için:

Tüm dosyaları İndirilenler klasöründen taşımak, ancak İndirme klasöründeki klasörler içindeki hiçbir dosyayı taşımak istemiyorsanız, bu komutu kullanın:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

burada -maxdepthseçenek 1, yalnızca derinlemesine bulmanın ne kadar denenmesi gerektiğini , yalnızca bulma komutunda belirtilen dizini belirtir. Sen kullanarak deneyebilirsiniz 2, 3test etmek de.

Ayrıntılı bir açıklama için Ubuntu find man sayfasına bakın.


3
Bir dizinin tamamını başka bir klasöre taşımak için yalnız mv kullanabilirsiniz: mv klasörü ~ / Documents
JohnMerlino

20
FYI İlk komutunuzun ("mv -v ~ / Downloads / * ~ / Videos /") nokta dosyalarının taşınmayacağına inanıyorum.
Mark Doliner,

1
Evet, .files hareket etmiyor
Anwar

3
Nb. senin -print0 | xargs -0 mv -t ~/Videosdaha verimli bir şekilde yapılabilir -exec mv -t ~/Videos \{\} \+:-)
artfulrobot

3
mv -v ~/Downloads/* ~/Videos/Gizli dosyalar için çalışmıyor
FreeLightman

28
mv ~/Downloads/* ~/Videos

İstediğiniz dizindeki alt klasörler dahil tüm dosyaları taşıyacaktır mv. Eğer isterseniz cp(kopyalama) ya da rmihtiyacınız olacak (kaldırmak) -ralt klasörleri eklemeyi (özyinelemeli) seçeneğini.


2
Mv komutumda -R seçeneği yok (Ubuntu 14.04).
Mark Doliner,

1
@MarkDoliner, evet, mvalt klasörleri dahil etmek için özyinelemeli seçeneğe ihtiyaç duymaz. Biri yeniden adlandırmak için de kullanabilir.
Alen

İhtiyacım yoktu *. Yıldızı kullanmadan da aynı şey oldu.
MycrofD

Klasör adlarının ön kısmındaki ~ /
işareti

Kaynak dizini boşsa bu çözüm hata verir.
Pierre Thibault

11

Basit bir durum için:

mv ~/Downloads/* ~/Videos

Nokta (gizli) dosyaları da taşımak istiyorsanız, dotglob kabuk seçeneğini ayarlayın.

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Bu, kabuk seçeneği kümesini bırakır.

Bir defa dotglob kullanımı için komutları bir alt kabukta çalıştırın:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)

Kendim için bir not: Son seçenek (shopt -s dotglob; mv ~/Downloads/* ~/Videos) yalnızca içeriği (gizli dosyalar dahil) taşır (keser). Bu durumda, hem başlangıç ​​hem de hedef klasörlerin önceden var olması gerekir. Sonunda, başlangıç ​​dizini boşalır.
Pathros

Bu kabul edilen cevap olmalıdır
megar

11

rsyncÖrneğin kullanarak mümkündür :

rsync -vau --remove-source-files src/ dst/

nerede:

-v, --verbose: Ayrıntıyı arttır.

-a, --archive: Arşiv modu; eşittir -rlptgoD(hayır -H, -A, -X).

-u, --update: Alıcıda daha yeni olan dosyaları atla.

--remove-source-files Bu rsync, gönderen tarafından , aktarımın bir parçası olan ve alıcı tarafa başarıyla kopyalanan dosyaları (dizin olmayan anlamına gelir) kaldırmayı bildirir .

Kök ayrıcalıklarınız varsa, sudoolası izin sorunlarının üstesinden gelmek için ile öneki ekleyin .


1
UYARI! belirtildiği gibi --delete-after seçeneği beklediğiniz şekilde çalışmaz. Başarılı kopyadan sonra kaynak dosyaları silmez ... HEDEFTE TÜM HATIRLANMASI / DİĞER DOSYALARI SİLİR. (@kenorb'ın belirttiği gibi ... ama yeterince dikkatli okumamıştım! DOH)
Jay Marm

4

kullanım

mv -v ~/rootfolder/branch/* ~/rootfolder

Umarım bu yardımcı olur. Çünkü aynı acıyı yaşadım ve hatayı düzeltmek için çok zaman harcadım.


2

İçeriği olan veya olmayan bir dizini tıpkı mvbir dosyayı yeniden adlandırmak için nasıl kullanacağınız gibi yeni adına taşımak için :

mv -T dir1 dir2

nerede:

  • -T hedefe normal bir dosya gibi davranır
  • dir1 dizinin asıl adı
  • dir2 dizinin yeni adı

NB: dir2var olmak zorunda değildir.

Umarım bu birisine çok zaman kazandırır, noob olarak, bundan önce, yeni bir isimle bir dizin oluşturur ve daha sonra dizinin içeriğini daha önce yaratılan dizine taşırdım.

Alt dizinler için kullan

Bu komut, birçok dosya hedef dizininin bir alt klasörüne kaydedildiğinde yararlıdır, yani Downloads/mp4. Bu örnekte, çalışan alt klasörün kaldırılmasıylamv -T Downloads/mp4 Videos sonuçlanacak ve içerdiği tüm dosyalar Videolar klasörüne taşınacaktır.mp4


1
+1, çünkü Xubuntu 14.04'te çalışıp çalışmadığını test etti. Bu komutun dir1kaldırılmasına neden olacağını göstermek için bu cevaba bir örnek ekledim . Bu önlemin yanı sıra, bu cevap günlük kullanım için iyi bir şey kaydetti.
clearkimura

1
"İçeriği olan veya olmayan bir dizini yeni adına taşımak için" Bir dizini ... bir isme nasıl taşıyabilirsiniz? Bu hiç mantıklı değil. "-T, hedefi normal bir dosya olarak kabul eder" Bir hedef nasıl dosya olabilir? Dizini mi kastediyorsun?
Monica Heddneck

Bir dosyayı sizin gibi yeni bir adla yeniden adlandırmak gibi bir şey yapar, mv fileA fileBancak -Tbu durumda bayrak hedef / dizini bir dosya olarak kabul eder ve yeniden adlandırır.
Feyisayo Sonubi,

Benim için çalıştı :)
Naveen Kumar V

1
  1. Komut satırına gidin ve taşımak istediğiniz dizine gidin cd folderNamehere
  2. Yazın pwd. Bu da taşımak istediğiniz dizini yazdıracaktır.
  3. Ardından tüm dosyaların bulunduğu dizine geçin cd folderNamehere
  4. Şimdi tüm dosya türlerini taşımak için mv *.* typeAnswerFromStep2here

Bu, tüm dosyaları bu dizinden diğerine taşıyacaktır.


3
Bu, herhangi bir uzantısı olmayan dosyalar ile eşleşmeyecektir. örneğin bir klasör dosyaları varsa: foo.txt, bar.ve barher ikisi de bar.ve bartaşınmaz. *Bunun yerine kullanmak *.*onunla ilgilenir. Ancak her iki durumda da, gizli dosyalar: .foobartaşınmaz.
Dan

1
mv source_path/* destination_path/

burada *kaynak eğik çizgiyi ve kaynak yolundan sonra, kaynak dizinin tamamı yerine source_path içindeki dosyaları alabilmesi için öne sürmeniz gerekir.

Örnek: mv /home/username/test/* /home/username/test2/

Yukarıdaki komut, kaynak dizindeki tüm dosyaları (gizli olmadıkça) hedef dizine taşır.


0

dene

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-tipi Eğer dizin anlamına vücuda verme kullanarak file.If ortalamasını olan bu ifadeye file.On türünü belirtebilirsiniz tipi bağımsız değişkenle.

-iname: Bir dosyayı aramanın en yaygın ve en açık yöntemi -name argümanını kullanmaktır. Eğer onun büyüklüğünün duyarlılığından emin değilseniz -iname argümanını kullanabilirsiniz.

mv {} ve nihayet hedef dizini belirlemek ve ardından dosyaları mv {} argümanını kullanarak oraya taşımak

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.