web-dev-qa-db-ja.com

親ディレクトリ内のすべてのファイルのディレクトリを作成するにはどうすればよいですか

親フォルダーがあり、このフォルダー内に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
6
user88036

これは複雑すぎます。 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%.*}"' {} \;
3
Costas

または、本当に簡単にすることもできます。 basenameの一部であるcoreutilsを使用します。

cd ParentFolder &&
for i in ./*.txt 
 do   
    d=$(basename "$i" .txt)   
    mkdir "$d" && mv "$i" "$d" 
 done
0
Allen