フォルダには多数のファイルがあります。各ファイルペアの名前は同じですが、拡張子は異なります(.objと.mtl)。同じ名前の各ファイルペアのフォルダを作成し、各ファイルペアを一致するフォルダに移動したいと思います。ファイル名には常に文字が含まれ、一部には下線と数字も含まれます。
私がする必要があるのは:
A)ファイル名を読む
B)前のファイルと同じ名前のサブディレクトリを作成する
C)ファイル名と一致するファイルのペアを一致するサブディレクトリに移動する
D)
例:
ファイル:Big_Column1.obj、Big_Column1.mtlは
サブディレクトリ:Big_Column1に移動します。
答え1
テストを経てうまく機能しました
名前は同じですが、拡張子が他のすべてのファイル名とは別のファイル名を見つけて、ディレクトリを構成および作成し、ファイルを同じ名前のディレクトリに移動します。
次の例では、Big_Column1、Big_Column2 ディレクトリが作成されます。
for i in `ls -ltrh directorypath| awk '{print $NF}'| awk -F "." '{print $1}'| sort| uniq`; do mkdir $i; yes|cp $i* $i; done
Before
praveen_linux_example pravee]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.obj
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.obj
command:n_linux_example pravee]# for i in `ls -ltrh | awk '{print $NF}'| awk -F "." '{print $1}'| sort| uniq`; do mkdir $i; yes|cp $i* $i; done
後ろに
After executing below is the output of ls -ltr
drwxr-xr-x. 2 root root 4096 Nov 30 22:39 Big_Column1
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.obj
drwxr-xr-x. 2 root root 4096 Nov 30 22:39 Big_Column2
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.obj
答え2
これを行うためのクイックガイドラインは次のとおりです。単にシェルワイルドカードを使用して現在のディレクトリ内のすべてのファイルを繰り返し(必要なファイルであると仮定)、ピリオドの前にファイル名でディレクトリを作成し(ディレクトリがすでに存在する場合はエラーなし)、cut
名前を変更します。mkdir -p
そこにファイルを移動します。実際には何もありません。
for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done