GNU/Linux >> Linux の 問題 >  >> Linux

長い名前の Linux mv ファイル

解決策 1:

単一のファイルを試してください

mv dir1/dir2/dir3/file.{txt,txt.old}

どこで X{a,b} Xa Xb に展開する を使用してプレビューできます

echo dir1/dir2/dir3/file.{txt,txt.old}

ニーズに合っているかどうかを確認してください。

注:

<オール>
  • 複数のファイルの場合

    mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
    
  • あなたが望むものに拡張する可能性は低いです。 (これは file.txt file1.txt.old file2.txt の混合に展開されます ...)

    1. {txt,txt.old} {,.old} に短縮できます コメント通り

    2. ディレクトリ名が明確な場合は、ワイルドカードを使用できます。

      mv *1/*2/d*/*.{,old}
      

    複数ファイルの場合 rename を使用

    rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt 
    

    -n を削除 効果的な名前変更を行います。

    解決策 2:

    コマンド rename 一致したすべてのファイルの名前を変更します。その主な目的は複数のファイルの名前を変更することですが、Perl 式が 1 つのファイルのみに一致する場合は、この 1 つのファイルのみを名前変更します。詳細とディストリビューション固有の構文については、マンページをお読みください:man rename .

    使用例:「/path/file.txt」の名前を「/path/file.txt.old」に変更します:

    rename 's/file.txt/file.txt.old/g' /path/file.txt

    より短い表記 (shalomb に感謝):

    rename 's/$/.old/' /path/file.txt
    rename '$_.=".old"' /path/file.txt
    

    ドライランには rename -n を使用します .

    その他の例と詳細は、https://thepcspy.com/read/bulk-rename-files-in-ubuntu/ にあります。

    解決策 3:

    {} 展開を使用する @archemar のソリューションが気に入っています。コマンドラインを既に開始しているときに使用できるからです。完全を期すためのその他の可能性は次のとおりです。

    F="dir1/dir2/dir3/file.txt" ; mv "$F" "$F.old"
    

    (引用符は、名前にスペースまたはその他の単語分割文字が含まれている場合にのみ必要です)

    mymv() {
        mv "$1/$2" "$1/$3"
    }
    
    mymv dir1/dir2/dir3 file.txt file.txt.old
    mymv dir5/dir6/dir7 file.txt file.txt.old
    

    注:

    • これは bash 構文です。別のシェルを使用している可能性があります
    • mymv 任意の適切な文字列を指定できます。「my move」には mymv を使用しました。
    • 関数定義は .bash_profile に入れることができます

    もう一つ:

    cd dir1/dir2/dir3 ; mv file.txt file.txt.old ; cd -
    

    でも

    (cd dir1/dir2/dir3/ && exec mv file.txt file.txt.old)
    

    (@Adam と @CharlesDuffy から) CD が失敗した場合には、間違いなく優れています。

    解決策 4:

    1 回限りのケースとして、現在のディレクトリを変更したくない場合は、サブシェルを使用するだけです:

    (cd dir1/dir2/dir3/ && mv file.txt file.txt.old)
    

    あなたがcdだから サブシェル内では、実際のシェルでディレクトリを変更していません

    解決策 5:

    mv を短くするためにサブディレクトリに入りたい場合 コマンドを実行したが、後で現在のディレクトリに戻りたい場合は、2 つの方法があります。 1つは cd を入れることです と mv サブシェルで(すでに提案されているように)

    もう1つは pushd を使用することです と popd ディレクトリを変更するには:

    pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd
    

    pushd コマンドは cd のようなものです ただし、最初に現在のディレクトリの名前をスタックにプッシュします。 popd スタックから最上位の名前を削除し、そのディレクトリに移動します。


    Linux
    1. Linuxターミナルでファイルの名前を変更します

    2. noatimeでLinuxシステムのパフォーマンスを向上させる

    3. lsでLinuxファイルのパーミッションを確認する

    1. Linuxでの並べ替えコマンドと例

    2. Linuxでのファイルパーミッションと例

    3. LinuxでCでファイルを書く方法は?

    1. Linuxの「検索」でファイル名のみを取得するには?

    2. Linux でこの名前のファイルを削除する方法:-]???????q

    3. ETAを使用したLinuxファイルのコピー?