ファイル名から特定の文字列を削除するには? [コピー]

ファイル名から特定の文字列を削除するには? [コピー]

次のディレクトリに複数のファイルがあります。/var/lib/jenkins/bin/

-rwxr-xr-x. 1 root root 4430846 Apr 27 09:45 01-DSP-04.12_03_crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL4-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL8-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:46 01-FPGA-04.12_02-crc.bin
-rwxr-xr-x. 1 root root  524328 Apr 27 09:46 01-MMI-04.11_05-crc.bin
-rwxr-xr-x. 1 root root   27692 Apr 27 09:46 01-PIC-04.11_06-crc.bin

また/var/lib/jenkins/scripts/my_script.sh

このスクリプトのファイル名から前の「01-」を削除したいと思います。これを行うための良い方法はありますか?

私は次の解決策を試しました。https://stackoverflow.com/questions/28305134/remove-first-n-character-from-bunch-of-file-names-with-cutしかし、私にとってはうまくいきません。

私は次のような結果を得ます。

注文する

$ for file in /var/lib/jenkins/bin/*; do echo mv $file `echo $file | cut -c4-`; done

出力

mv /var/lib/jenkins/bin/01-DSP-04.12_03_crc.bin r/lib/jenkins/bin/01-DSP-04.12_03_crc.bin
mv /var/lib/jenkins/bin/test.sh r/lib/jenkins/bin/test.sh

ご覧のとおり、ファイル名ではなくディレクトリ名の最初の3文字を削除します。ファイル名から21文字の後の3文字を削除したいと思います。

これを行うより良い方法はありますか?

ベストアンサー1

問題は、フルパスを使用しているので、ディレクトリを含めることです。最も簡単な解決策は、まずターゲットcdディレクトリに移動してからforループを実行することです。

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done

または、シェル自体を使用してください。文字列演算能力:

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done

または、perl-rename(renameDebianベースのシステムまたはperl-rename他のシステムから呼び出されます)がある場合は、次のことができます。

rename -n 's|.*/...||' /var/lib/jenkins/bin/*

有効であることが確認されたら、削除して-n実際に名前を変更してください。


しかし、Sundeepがコメントで指摘したように、単に削除したい場合は、具体的01-に削除してください。

rename -n 's|.*/01-||' /var/lib/jenkins/bin/*

おすすめ記事