Bashに_
。
私はそれを含むすべてのファイルでプレフィックスを使用するか、rename
単にmv
削除できると確信しています。_
私は試みる:
for file; do
mv "$file" "${file//_/}"
done
しかし、これは私が望む効果を得ることができませんでした。_
すべてのファイルからプレフィックスを削除するには、どのコマンドを使用できますか?
答え1
1)for file; do
スクリプトのコマンドラインパラメータであるループ位置パラメータです。for file in *; do
ディレクトリ内のファイルを繰り返すために使用されます(またはアンダー_*
スコアが前に付いたファイルのみを取得します)。
2)ファイル名の先頭の下線を削除する${file#_}
代わりに使用できます。特に最初からセクションを削除しました。これは標準機能であり、もちろん削除されます。${file//_/}
${par#word}
${par/pat/repl}
${file//_}
みんな最初のスラッシュだけでなく、スラッシュ(二重スラッシュを使用したため)。
3)少なくともLinux(GNU Userland)とFreeBSDでは、mv -n
これを使用してファイルを上書きしないように要求できます。もしかして。
だから、
for file in _*; do
mv -n -- "$file" "${file#_}"
done
答え2
簡単にprename
(Perlの名前変更)コマンド:
prename -n 's/^_//' _*
答え3
あなたは非常に近いです:
for file in _*; do
if ! [[ -f "${file/_/}" ]]; then
mv "$file" "${file/_/}"
else
echo "Replacement for '$file' already exists; skipping.." 1>&2
fi
done
なぜ${file/_/}
?下線の接頭辞を指定したからです。だから_file_name.ext
それはなりますfile_name.ext
。あなたがそれを持っているなら${file//_/}
、_file_name.ext
あなたはそれになりますfilename.ext
。
答え4
あなたはsedを使用することができます
for file in /some/path/*; do
if [ -f "$file" ]; then
mv "$file" `echo "$file" | sed 's*_**g'`
fi
done