フォルダ内のファイルを個々のフォルダにコピー

フォルダ内のファイルを個々のフォルダにコピー

奇妙に聞こえるかもしれませんが、私のHTPCでは、フォルダ内の各個々のファイルをそのサブディレクトリ(ファイルと同じ名前を使用して)に移動するようにファイルを保存する方法を並べ替える必要があります。

IE - 現在のディレクトリは次のとおりです。

directory/
- a.file
- b.file
- c.file

私はそれを次のように変更したいと思います:

directory/
- a/
-- a.file
- b/
-- b.file
- c/
-- c.file

私はこれが非常に難しいとは思わないが、奇妙です。以前、誰かがこれを行うのを見たことはありません。 findとexecを使って行うことができると思いますが、私は戦闘員なので、これをよく理解できません。 。

事前に感謝します(または時間をかけてこの記事を読んでくれてありがとう)。

答え1

別の解決策:

#!/usr/bin/env bash

Dir="/tmp/directory/"

for f in "$Dir"/*;
do
    SubDir="${f%.*}"
    mkdir -- "$SubDir"
    mv -- "${f}" "$SubDir/"
done

答え2

ファイルをパラメーターとして使用するシェル・スクリプトを作成します。

#!/bin/bash

for filepath; do
  parentpath="${filepath%/*}"
  if [ "$parentpath" != "$filepath" ]; then # $file contains a /
    file="${filepath#"$parentpath"/}"
  else
    file="$filepath"
    parentpath=""
  fi
  filename="${file%.*}"
  if [ -z "$parentpath" ]; then
    mkdir -p "$filename" && mv "$file" "$filename"
  else
    mkdir -p "${parentpath}/$filename" &&
      mv "$filepath" "${parentpath}/$filename"
  fi
done

./script *.ext1 *.ext2 *.ext3大きすぎない、または数がfind ... -exec ./script {} +多いファイルに対してこのスクリプトを呼び出すことができます。

関連情報