親フォルダーがあり、このフォルダー内に4つのファイルがあります
ParentFolder
File1.txt
File2.txt
File3.txt
File4.txt
親フォルダー内にサブフォルダーを作成し、ファイルの名前を保持してから、次のような名前のフォルダー内のすべてのファイルを移動します。
ParentFolder
File1
File1.txt
File2
File2.txt
File3
File3.txt
File4
File4.txt
バッチまたはtschスクリプトでそれを行うにはどうすればよいですか?私はこのスクリプトを試しました:
#!/bin/bash
in=path_to_my_parentFolder
for i in $(cat ${in}/all.txt); do
cd ${in}/${i}
ls > files.txt
for ii in $(cat files.txt); do
mkdir ${ii}
mv ${ii} ${in}/${i}/${ii}
done
done
これは複雑すぎます。 all.txt
で何をしようとしているかわかりません。ディレクトリ内のファイルを列挙するには、ls
を呼び出さないでください。これはより複雑で、 とにかく確実に機能しない です。 ワイルドカードパターン を使用します。
ファイル名の最後にある拡張子(.txt
)を取り除くには、 変数置換 のサフィックス除去機能を使用します。 常に変数の置換を二重引用符で囲みます 。
cd ParentFolder
for x in ./*.txt; do
mkdir "${x%.*}" && mv "$x" "${x%.*}"
done
ループの代わりにfind
を使用できます
find ParentFolder/* -Prune -type f -exec \
sh -c 'mkdir -p "${0%.*}" && mv "$0" "${0%.*}"' {} \;
または、本当に簡単にすることもできます。 basename
の一部であるcoreutils
を使用します。
cd ParentFolder &&
for i in ./*.txt
do
d=$(basename "$i" .txt)
mkdir "$d" && mv "$i" "$d"
done