Tek bir komutta dosya varsa, Linux'ta dosyayı yeniden adlandırın

Dosya tek bir komutta bulunuyorsa, Linux'ta dosyayı yeniden adlandırmak istiyorum.

Diyelim ki test.text dosyasında arama yapmak ve test.text.bak ile değiştirmek istediğimde aşağıdaki komutu kullanıyorum

find/-name test.text if it exist then I fire the command mv test.text test.text.bak

Bu senaryoda iki komutu yürütüyorum ancak bunun tek komutta gerçekleşmesini istiyorum.

Teşekkürler

2
git gibi bazı sürüm kontrol sistemlerini kullanmak isteyebilirsiniz.
katma yazar Basile Starynkevitch, kaynak
git gibi bazı sürüm kontrol sistemlerini kullanmak isteyebilirsiniz.
katma yazar Basile Starynkevitch, kaynak
find bölümünü atlayın ...
katma yazar Karoly Horvath, kaynak
find bölümünü atlayın ...
katma yazar Karoly Horvath, kaynak

9 cevap

dir alt dizininde bir yerde test.txt bulmak ve taşımak istiyorsanız, deneyin

find dir -name test.txt -exec mv {} {}.bak \;

Bu, koşullara uyan tüm dosyaları taşıyacaktır. Geçerli dizinden geçmek istiyorsanız, dir yerine dizin olarak . 'u kullanın.

Teknik olarak, bu, find ile eşleşen her dosya için ayrı bir işlemde ayrı bir komut üretecektir, ancak tek kod olarak find kullandığınız anlamına gelir. emir gerçekten başlıyorsun. (İsterseniz ham bir programlama dili olarak find öğesini düşünün.)

3
katma
Biraz geçerli bir durum olsa da, yalnızca geçerli dizinde arama yapmak için -maxdepth 1 ekleyebilirsiniz.
katma yazar tripleee, kaynak

dir alt dizininde bir yerde test.txt bulmak ve taşımak istiyorsanız, deneyin

find dir -name test.txt -exec mv {} {}.bak \;

Bu, koşullara uyan tüm dosyaları taşıyacaktır. Geçerli dizinden geçmek istiyorsanız, dir yerine dizin olarak . 'u kullanın.

Teknik olarak, bu, find ile eşleşen her dosya için ayrı bir işlemde ayrı bir komut üretecektir, ancak tek kod olarak find kullandığınız anlamına gelir. emir gerçekten başlıyorsun. (İsterseniz ham bir programlama dili olarak find öğesini düşünün.)

3
katma
Biraz geçerli bir durum olsa da, yalnızca geçerli dizinde arama yapmak için -maxdepth 1 ekleyebilirsiniz.
katma yazar tripleee, kaynak

dir alt dizininde bir yerde test.txt bulmak ve taşımak istiyorsanız, deneyin

find dir -name test.txt -exec mv {} {}.bak \;

Bu, koşullara uyan tüm dosyaları taşıyacaktır. Geçerli dizinden geçmek istiyorsanız, dir yerine dizin olarak . 'u kullanın.

Teknik olarak, bu, find ile eşleşen her dosya için ayrı bir işlemde ayrı bir komut üretecektir, ancak tek kod olarak find kullandığınız anlamına gelir. emir gerçekten başlıyorsun. (İsterseniz ham bir programlama dili olarak find öğesini düşünün.)

3
katma
Biraz geçerli bir durum olsa da, yalnızca geçerli dizinde arama yapmak için -maxdepth 1 ekleyebilirsiniz.
katma yazar tripleee, kaynak

Sadece:

mv test.text test.test.bak 

Dosya yoksa hiçbir şey yeniden adlandırılmaz. Hata iletisini gizlemek için, hiçbir dosya çıkmadığında, sözdizimini kullanın:

mv test.text test.test.bak 2>/dev/null
1
katma
@chaos Hata mesajını bastırmak bir şeydir; ancak test.text yoksa hala mv sıfır olmayan bir çıkış koduyla döner; ki ne olmak istediğinizi olabilir veya olmayabilir.
katma yazar GhostCat, kaynak
"İş" derken, mevcut dizinde bulmasını söylediğiniz dosyadan başka bir dosya bulacağını mı kastediyorsunuz? Tabii ki değil. mv basitçe dosya adı parametresini inceler; mv yolu///dosya.txt yolu///dosya.txt.bak derseniz, geçerli dizinde yolunda ve sonra bunun içinde. Mutlak bir dosya adı kullanırsanız, onu kullanacaktır.
katma yazar tripleee, kaynak
Geçerli kodda test.text bulunmuyorsa bu çözüm işe yarar mı?
katma yazar Tim Biegeleisen, kaynak
@tripleee Evet, doğru, ancak soru nasıl yazılır: "sonra mv test.text test.text.bak komutunu ateşlerim" çalışma dir.
katma yazar chaos, kaynak

Sadece:

mv test.text test.test.bak 

Dosya yoksa hiçbir şey yeniden adlandırılmaz. Hata iletisini gizlemek için, hiçbir dosya çıkmadığında, sözdizimini kullanın:

mv test.text test.test.bak 2>/dev/null
1
katma
@chaos Hata mesajını bastırmak bir şeydir; ancak test.text yoksa hala mv sıfır olmayan bir çıkış koduyla döner; ki ne olmak istediğinizi olabilir veya olmayabilir.
katma yazar GhostCat, kaynak
"İş" derken, mevcut dizinde bulmasını söylediğiniz dosyadan başka bir dosya bulacağını mı kastediyorsunuz? Tabii ki değil. mv basitçe dosya adı parametresini inceler; mv yolu///dosya.txt yolu///dosya.txt.bak derseniz, geçerli dizinde yolunda ve sonra bunun içinde. Mutlak bir dosya adı kullanırsanız, onu kullanacaktır.
katma yazar tripleee, kaynak
Geçerli kodda test.text bulunmuyorsa bu çözüm işe yarar mı?
katma yazar Tim Biegeleisen, kaynak
@tripleee Evet, doğru, ancak soru nasıl yazılır: "sonra mv test.text test.text.bak komutunu ateşlerim" çalışma dir.
katma yazar chaos, kaynak

Sadece:

mv test.text test.test.bak 

Dosya yoksa hiçbir şey yeniden adlandırılmaz. Hata iletisini gizlemek için, hiçbir dosya çıkmadığında, sözdizimini kullanın:

mv test.text test.test.bak 2>/dev/null
1
katma
@chaos Hata mesajını bastırmak bir şeydir; ancak test.text yoksa hala mv sıfır olmayan bir çıkış koduyla döner; ki ne olmak istediğinizi olabilir veya olmayabilir.
katma yazar GhostCat, kaynak
"İş" derken, mevcut dizinde bulmasını söylediğiniz dosyadan başka bir dosya bulacağını mı kastediyorsunuz? Tabii ki değil. mv basitçe dosya adı parametresini inceler; mv yolu///dosya.txt yolu///dosya.txt.bak derseniz, geçerli dizinde yolunda ve sonra bunun içinde. Mutlak bir dosya adı kullanırsanız, onu kullanacaktır.
katma yazar tripleee, kaynak
Geçerli kodda test.text bulunmuyorsa bu çözüm işe yarar mı?
katma yazar Tim Biegeleisen, kaynak
@tripleee Evet, doğru, ancak soru nasıl yazılır: "sonra mv test.text test.text.bak komutunu ateşlerim" çalışma dir.
katma yazar chaos, kaynak
for FILE in `find . -name test.test 2>/dev/null`; do mv $FILE $FILE.bak; done

Bu, "test.test" adlı tüm dosyaları güncel ve alt dizinlerde arar ve sonra her dosyayı .bak olarak yeniden adlandırır.

0
katma
Bu, herhangi bir kullanışlı tanımla birden fazla komut çalıştırır ve adları boşluk veya diğer kabuk meta karakterleri içeren dosyalarda başarısız olur. En basit ve en sağlam düzeltme muhtemelen find -exec mv 'ya geçmektir, ancak bu cevabımı çoğaltır.
katma yazar tripleee, kaynak
for FILE in `find . -name test.test 2>/dev/null`; do mv $FILE $FILE.bak; done

Bu, "test.test" adlı tüm dosyaları güncel ve alt dizinlerde arar ve sonra her dosyayı .bak olarak yeniden adlandırır.

0
katma
Bu, herhangi bir kullanışlı tanımla birden fazla komut çalıştırır ve adları boşluk veya diğer kabuk meta karakterleri içeren dosyalarda başarısız olur. En basit ve en sağlam düzeltme muhtemelen find -exec mv 'ya geçmektir, ancak bu cevabımı çoğaltır.
katma yazar tripleee, kaynak
for FILE in `find . -name test.test 2>/dev/null`; do mv $FILE $FILE.bak; done

Bu, "test.test" adlı tüm dosyaları güncel ve alt dizinlerde arar ve sonra her dosyayı .bak olarak yeniden adlandırır.

0
katma
Bu, herhangi bir kullanışlı tanımla birden fazla komut çalıştırır ve adları boşluk veya diğer kabuk meta karakterleri içeren dosyalarda başarısız olur. En basit ve en sağlam düzeltme muhtemelen find -exec mv 'ya geçmektir, ancak bu cevabımı çoğaltır.
katma yazar tripleee, kaynak