linux - 権限 - ファイルの移動 コマンド




mvが存在しない場合に移動するディレクトリを作成する方法はありますか? (8)

Sillier、しかし働いている方法:

mkdir -p $2
rmdir $2
mv $1 $2

mkdir -pでディレクトリを作成し、目的のファイル名を共有する一時的なディレクトリを作成し、単純なrmdirでそのファイル名のディレクトリを削除し、ファイルを新しい場所に移動します。 私はdirnameを使った答えがおそらく最高だと思う。

だから私がホームディレクトリにいて、foo.cを〜/ bar / baz / foo.cに移動したいが、それらのディレクトリが存在しない場合、それらのディレクトリを自動的に作成する方法があるので入力するだけです

mv foo.c ~/bar/baz/ 

すべてがうまくいくだろうか? これらのディレクトリが存在するかどうかを確認する単純なbashスクリプトにmvをエイリアスできるかのようですが、mkdirを呼び出してからmvを呼び出すのではなく、誰かがより良いアイデアを持っているかどうかを確認すると思いました。


mvまたはmv.shという名前のスクリプトとして保存する

#!/bin/bash
# mv.sh
dir="$2"
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "[email protected]"

または、〜/ .bashrcファイルの最後に、新しい端末ごとにデフォルトのmvを置き換える関数を追加します。 関数を使うと、毎回スクリプトファイルを読み込まなくても、bashにメモリを保持させることができます。

function mv ()
{
    dir="$2"
    tmp="$2"; tmp="${tmp: -1}"
    [ "$tmp" != "/" ] && dir="$(dirname "$2")"
    [ -a "$dir" ] ||
    mkdir -p "$dir" &&
    mv "[email protected]"
}

これらはChris Lutzの提出に基づいています。


この1ライナーはいかがですか(bashで):

mkdir --parents ./some/path/; mv yourfile.txt $_

それを打ち破る:

mkdir --parents ./some/path

ディレクトリ(すべての中間ディレクトリを含む)を作成します。

mv yourfile.txt $_

そのディレクトリにファイルを移動します($ _は前のシェルコマンドに渡された最後の引数、つまり新しく作成されたディレクトリに展開されます)。

これが他のシェルでどれくらい動作するかはわかりませんが、何を探したらいいか分からないかもしれません。

このテクニックを使用した例を次に示します。

$ > ls
$ > touch yourfile.txt
$ > ls
yourfile.txt
$ > mkdir --parents ./some/path/; mv yourfile.txt $_
$ > ls -F
some/
$ > ls some/path/
yourfile.txt

これを行う最も簡単な方法は次のとおりです。

 mkdir [directorie name] && mv [filename] $_

ダウンロードディレクター(〜/ダウンロード)にあるpdfファイルをダウンロードし、終了しないディレクター( 「my_PDF」と言う)にすべて移動したいとします。
次のコマンドを入力します(私の現在の作業ディレクターが〜/ダウンロードしていることを確認してください):

mkdir my_PDF && mv *.pdf $_

次のようにサブディレクトリを作成する場合は、mkdirに-pオプションを追加できます。 ( "python"という名前のサブディレクトリを作成すると仮定します)
mkdir -p my_PDF/python && mv *.pdf $_


コード:

if [[ -e $1 && ! -e $2 ]]; then
   mkdir --parents --verbose -- "$(dirname -- "$2")"
fi
mv --verbose -- "$1" "$2"

例:

引数: "d1" "d2 / sub"

mkdir: created directory 'd2'
renamed 'd1' -> 'd2/sub'

ブレース拡張を使用することもできます:

mkdir -p directory{1..3}/subdirectory{1..3}/subsubdirectory{1..2}      
  • 3つのディレクトリ(directory1、directory2、directory3)を作成し、
    • 2つのサブディレクトリ(サブディレクトリ1、サブディレクトリ2)、
      • それぞれに2つのサブサブディレクトリ(サブサブディレクトリ1とサブサブディレクトリ2)があります。

bash 3.0以降を使用する必要があります。


私の一言の解決策:

test -d "/home/newdir/" || mkdir -p "/home/newdir/" && mv /home/test.txt /home/newdir/

$what=/path/to/file;
$dest=/dest/path;

mkdir -p "$(dirname "$dest")";
mv "$what" "$dest"




mv