親フォルダがあり、このフォルダには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
答え1
あなたはこれをとても複雑にしています。あなたが何をしたいのかわかりませんall.txt
。ディレクトリ内のファイルを列挙するには呼び出さないでくださいls
。これはより複雑です。とにかく安定して動作しません。使うワイルドカードパターン。
.txt
ファイル名の末尾の拡張子()を削除するには、サフィックス削除機能を使用します。変数の置換。
変数の置換には常に二重引用符を使用してください。。
cd ParentFolder
for x in ./*.txt; do
mkdir "${x%.*}" && mv "$x" "${x%.*}"
done
答え2
屋根の代わりに使用できますfind
find ParentFolder/* -prune -type f -exec \
sh -c 'mkdir -p "${0%.*}" && mv "$0" "${0%.*}"' {} \;
答え3
または、本当に簡単に保つことができます。使用basename
、部分coreutils
。
cd ParentFolder &&
for i in ./*.txt
do
d=$(basename "$i" .txt)
mkdir "$d" && mv "$i" "$d"
done