author - name
いくつかの書籍のファイル名の文字列をname - author
。に変更したい。
ls * | sed -r 's/(.+) - (.+).pdf/mv \2 - \1.pdf/' | sh
たぶんそれは混合かもしれません 記号で区切られた任意の長さの2つの文字列を置き換えます。 そしてsedを使用して複数のファイルの名前を変更する
これはうまくいきません
for file in *; do mv "$file" "$(echo "$file" | sed -r 's/(.+) - (.+).pdf/\2 - \1.pdf/')"
...でもない
rename 's/\([.]+\) - \([.]+\)\.pdf/\2 - \1\.pdf/' *
これは効果があります
rename 's/(.+) - (.+).pdf/\2 - \1.pdf/' *
答え1
この試み
% ls -1
001-foobar.pdf
002-foobar.pdf
003-foobar.pdf
パスワード
% rename -n 's/([^-]+)-([^\.]+)\.pdf/$2-$1.pdf/' *.pdf
001-foobar.pdf -> foobar-001.pdf
002-foobar.pdf -> foobar-002.pdf
003-foobar.pdf -> foobar-003.pdf
ノート
(テストが正常な場合は -n スイッチを外してください.)
これを行うこともできないかもしれない同じ名前の他のツールがあるので注意してください。
次のコマンドを実行すると(GNU
)
$ file "$(readlink -f "$(type -p rename)")"
この結果が出ました。
.../rename: Perl script, ASCII text executable
以下は含まれません:
ELF
もしそうなら、これは正しいツールのようです=)
そうでない場合は、それをデフォルト値に設定し(通常はすでに適用されている)、Debian
次のように派生しますUbuntu
。
$ sudo update-alternatives --set rename /path/to/rename
(コマンドのパスに置き換えます/path/to/rename
。perl's rename
このコマンドがない場合は、パッケージマネージャを検索してインストールするか、手動で行う
最後に、このツールはもともとPerlの父親であるLarry Wallによって書かれました。
答え2
author - name.pdf
ファイル名はパターンに従い、両方ともスペースを除く有効な文字をauthor
含めることができると仮定します。name
-
find . -type f -name '* - *.pdf' \
-execdir sh -c 'b=${1% - *}; e=${1#* - }; mv "$1" "${e%.pdf} - $b.pdf"' sh {} \;
これにより、現在のディレクトリでパターンと一致する名前のすべての一般的なファイルが検索されます* - *.pdf
。
これらのファイルごとにサブシェルが実行されます。サブシェルは次のタスクを実行します。
b=${1% - *} # pick out the start of the filename
e=${1#* - } # pick out the end of the filename
# Combine $b and $e into a new filename while removing ".pdf" from
# the end of the original filename and adding it to the end of
# the new filename instead.
mv "$1" "${e%.pdf} - $b.pdf"
テストしてみてください:
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Aug 30 11:31 arr! - Boaty McBoatface.pdf
-rw-r--r-- 1 kk wheel 0 Aug 30 11:30 hello world - bingo-night!.pdf
$ find . -type f -name '* - *.pdf' -execdir sh -c 'b=${1% - *}; e=${1#* - }; mv "$1" "${e%.pdf} - $b.pdf"' sh {} \;
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Aug 30 11:31 Boaty McBoatface - arr!.pdf
-rw-r--r-- 1 kk wheel 0 Aug 30 11:30 bingo-night! - hello world.pdf
もう一度実行すると、名前が元の名前に戻ります。