2017-08-03 11 views
-3

このbashコマンドは、ディレクトリにまだ存在しないすべてのファイルを新しい自己名前付きフォルダに移動します。ファイル名のベース部分にちなんで名付けられたディレクトリにカレントディレクトリ内のすべてのファイルを移動するにはディレクトリにないファイルはすべて、自分の名前のディレクトリに移動しますか?

ll | grep ^- | awk -F"." '{print $2 "." $3}' | awk -F":" '{print $2}' | awk '{$1=""; print $0}' | cut -c2- | awk -F"." '{print "mkdir ""$1"";mv ""$1"."$2"" ""$1"""}' > tmp;source tmp 
+2

mmh質問がありますか? – DanieleO

+3

[ここで読む: 'ls'の出力を解析しない理由(http://mywiki.wooledge.org/ParsingLs)。 – Anubis

+1

質問が「目標を達成する最悪の解決策は何か」とすれば、これは非常に近いでしょう。 – hek2mgl

答えて

1

for f in * 
do 
    [ -f "$f" -o -d "${f%.*}" ] || continue 
    mkdir "${f%.*}" && mv "$f" "${f%.*}" 
done 

これは-fファイルではない、現在のディレクトリ内のすべてのエントリをスキップします。すでにディレクトリ名が付けられているエントリもスキップします。次に、ディレクトリ名(「ピリオドの後ろに何かが続く」という名前のファイル名を除いた名前)を作成し、成功した場合はそのファイルをそのディレクトリに移動します。

+0

拡張子のないファイルではこれが動作しますか? – Arkadiy

+0

はピリオドに基づいてファイル名を分割しているので、例コードではありませんが、いずれのコードでも同じではありません。 –

関連する問題