コマンドラインでファイルに番号を付け、各フォルダを再起動しますか?

コマンドラインでファイルに番号を付け、各フォルダを再起動しますか?

私は小さなスクリプトを使ってファイル番号を付けます。私はカスタム作業から始めましたthunar。すべてのファイルが同じディレクトリにある場合にのみ機能します。新しいファイル名は、5つのファイル名を変更00001.extしたときの名前です00005.extkrename各フォルダに再起動するオプションがあります。

私がこれを持っているとき

/path/to/folder1/file1
/path/to/folder1/file2
/path/to/folder2/file1
/path/to/folder2/file2

私のスクリプトはこれを生成します

/path/to/folder1/00001
/path/to/folder1/00002
/path/to/folder1/00003
/path/to/folder2/00004
               ^
           folder two

私が望むもの

/path/to/folder1/00001
/path/to/folder1/00002
/path/to/folder1/00003
/path/to/folder1/00004
               ^
           folder 1

ファイル名を変更して新しいフォルダごとに再起動できるコマンドラインツールはありますか?

答え1

使用真珠rename(すべてのオペレーティングシステムで動作):

rename -n 's!folder\d+/.*!sprintf "folder1/%05d", ++$MAIN::c!se' ./folder*/*
$ tree folder*
folder1
├── 00001
├── 00002
├── 00003
└── 00004
folder2

スイッチの削除-n、別名。試運転あなたの試みが満足なとき実際の名前に変更

より深く:

以下を使用してキャプチャできますfolder

rename -n 's!([^/]+)\d+/.*!sprintf("%s1/%05d", $1, ++$MAIN::c)!se' ./folder*/*

それを実現する動的

必要に応じてさらにロジックを追加できます。これはPerlコードです。

答え2

そしてzsh

autoload -Uz zmv
n=0
(cd /path/to && zmv -n 'folder<->/*(#qDn.)' 'folder1/${(l[5][0])$((++n))}')

nglob修飾子を参照してくださいq。したがって、ファイルは数字でソートされます。たとえば、デフォルトの語彙順序を使用して取得したフォルダ1とフォルダ2のファイルの間ではなく、フォルダ10のファイル名がフォルダ9のファイル名に変更されます。

満足すれば削除-n(テスト実行)します。

関連情報