スクリプトを使用してファイルを移動する方法

スクリプトを使用してファイルを移動する方法

実行時に引数で指定されたファイル形式をそのフォルダに移動する(またはファイル形式がない場合は、そのファイル形式でフォルダを作成する)スクリプトを設計するように求められました。

私が./M6.sh mp3 txtコマンドを出すとしましょう。

これにより、現在の作業ディレクトリ内のすべてのmp3ファイルが「mp3」というフォルダに移動さ​​れ、すべてのmp3ファイルがそのフォルダにコピーされ、現在の作業ディレクトリ内のすべてのテキストファイルがtxtフォルダと呼ばれるフォルダに移動さ​​れます。

以下のコードを書いていますが、mvコマンドの使用に問題があります。

助けてください。

ここに画像の説明を入力してください。

ベストアンサー1

コードは不必要に複雑です。問題は、mvターゲットディレクトリがまだ存在しないと呼び出すことができないことです。また、コンテンツをルートディレクトリのディレクトリに移動しようとしているようです。

考える

#!/bin/sh

for suffix do
    mkdir -p -- "$suffix" || exit 1
    mv -- *."$suffix" "$suffix"
done

または、

#!/bin/bash

suffixes=( "$@" )

for suffix in "${suffixes[@]}"; do
    mkdir -p -- "$suffix" || exit 1
    mv -- *."$suffix" "$suffix"
done

(ディレクトリを生成できないときにスクリプトを終了するのではなく、次の指定されたサフィックスに移動するには、それを変更しますexit 1。)continue

これはすべてのファイル名サフィックスを繰り返します(実際にはそうではありません)。ファイルタイプ「一般ファイル」、「ディレクトリ」、「シンボルリンク」などのUnixのファイル形式)対応するサフィックスと呼ばれるサブディレクトリが現在のディレクトリに作成され、そのサフィックスで終わるすべてのファイルが作成されます."$suffix"。サフィックスはディレクトリに移動されます。

ディレクトリがすでに存在する場合、コマンドはmkdir -p dirname失敗しません。dirname

例を実行してください:

$ tree
.
|-- file1.mp3
|-- file1.png
|-- file1.txt
|-- file2.mp3
|-- file2.png
|-- file2.txt
|-- file3.mp3
|-- file3.png
|-- file3.txt
|-- file4.mp3
|-- file4.png
|-- file4.txt
|-- file5.mp3
|-- file5.png
|-- file5.txt
`-- script.sh

0 directory, 16 files
$ ./script.sh txt mp3
$ tree
.
|-- file1.png
|-- file2.png
|-- file3.png
|-- file4.png
|-- file5.png
|-- mp3
|   |-- file1.mp3
|   |-- file2.mp3
|   |-- file3.mp3
|   |-- file4.mp3
|   `-- file5.mp3
|-- script.sh
`-- txt
    |-- file1.txt
    |-- file2.txt
    |-- file3.txt
    |-- file4.txt
    `-- file5.txt

2 directories, 16 files

おすすめ記事