タイトルがファイル番号の前に表示されるため、ファイルの順序が正しくない複数のディレクトリがあります。拡張子を除くすべてのファイルを最後に一致させて置き換えたいので、数字は以下のように先頭にあります。
したがって;
A guide to perfect eggs-456704.mp4
Boil an egg-456702.mp4
How to ruin scrambled eggs-456703.mp4
Make green eggs and ham-456701.mp4
Poached eggs-456705.mp4
これに関して:
456701-Make green eggs and ham.mp4
456702-Boil an egg.mp4
456703-How to ruin scrambled eggs.mp4
456704-A guide to perfect eggs.mp4
456705-Poached eggs.mp4
スペースを持つ各ファイルには、任意のヘッダー長があります。数字は「.mp4」拡張子の前の6桁ですが、ヘッダーの後にはダッシュがあります。
ベストアンサー1
使用find
そしてShell (Bash, ksh, ksh93, mksh, zsh) Pattern substitution expansion
。
find * -type f -name "*.mp4" -exec bash -c 'echo mv -v "$1" "${1//[^0-9]}-${1//[\-0-9]}"' _ '{}' \;
数字を除くすべてを削除
${1//[^0-9]}
します。 is は//
グローバル代替構文で、/
数字が最初に表示される場合にのみ使用されます。次に、ダッシュ/ハイフンを使用
-
して、aまたは数字である${1//[\-0-9]}
すべての項目を削除します(ファイル名にaと数字の部分のみがあると仮定)。-
-
上記で使用したコマンドは-exec
何らかの理由で安全ではありません。1、2ここでShell Substitution Expansionを使用すると、ファイルパスを使用して予期しない名前が変更され、-
ファイル名のすべてのダッシュが削除されます。
echo
最後に、テストの実行に使用された場所で実際の名前を変更するには、コマンドから上記の項目を削除することを忘れないでください。
find . -type f -name "*.mp4" -execdir sh -c '
n="${1##*-}";fn="${1%-*}";
echo mv -v "$1" "${n%.*}-${fn##*/}.mp4" ' _ '{}' \;
前と同じコマンドですが、ここでは次のように使用します。shell (POSIX sh/bash/Korn/zsh) parameter substitution expansion
これにより、削除する必要がある最後のダッシュを除いて、-
ファイル名のすべてのダッシュがそのまま残ります(存在する場合)。a file-with -- here-006.file
-type f
次に終わるファイルを探しています。つまり、現在のディレクトリを次に変更します。.mp4
-execdir
find
文書ディレクトリ自体内でsh -c '...'を探して実行します。
"cut-up-to-last-prefix"を使用:
n="${1##*-}"
ファイル名の先頭から最後のダッシュまですべてを削除し、変数に-
割り当てるか、現在のディレクトリに戻る相対パス。-
n
$1
${1}
./fileName
-execdir sh -c '...' _ '{}' \;
"cut-up-to-first-suffix"を使用:最初のダッシュとそれ自体が表示される
fn="${1%-*}"
まで、ファイル名の末尾からすべてを削除して変数に割り当てます。-
-
fn
今
n="456704.mp4"
(nf="./A guide to perfect eggs"
最初のファイルを想定)。それから;最初の点とそれ自体が表示される
${n%.*}-
まで、fileNameの末尾からすべてを削除し、ダッシュを追加します。したがって、これはfileNameの数値部分のみを生成します。.
.
-
456704
${fn##*/}.mp4
ファイル名の要求から最後の/
スラッシュとそれ自体を確認し、最後に追加するまで/
すべてを削除します。.mp4
そのため、このような結果が出てくるのですA guide to perfect eggs.mp4
。
1 使用にはどのようなセキュリティ問題と競合状態がありますかfind -exec
?
2 PATHのディレクトリに "-execdir"操作を使用するのが安全ではないのはなぜですか?