次のディレクトリにいくつかのファイルがあります:/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
rename
あるいは、 perl-rename ( Debian ベースのシステムでは呼び出され、他のシステムでは呼び出されます) がある場合はperl-rename
、次のように実行できます。
rename -n 's|.*/...||' /var/lib/jenkins/bin/*
動作を確認したら、 を削除して-n
実際に名前を変更します。
ただし、Sundeep がコメントで指摘したように、 のみを削除したい場合は01-
、それを具体的に削除します。
rename -n 's|.*/01-||' /var/lib/jenkins/bin/*