正しい用語を使用してファイル名を変更するためにその文字を検索または削除する方法を尋ねるか、BASHスクリプトを使用せずに削除して他の形式の文字を削除できるように、「印刷できない」文字とは何ですか?
これは私が使用しているスクリプトですが、望む結果を得ていません。
#!/bin/bash
typeset -i count
let count=0
working_dir="/home/userx/temp/"
script_dir="/home/userx/temp/"
MAXFILES="$(find "$working_dir" -type f | wc -l)"
find "$working_dir" -type f | while [[ $count -ne '3' ]] ;
do read FILENAME;
w=$FILENAME
xpath=${w%/*}
xbase=${w##*/}
xfext=${xbase##*.}
xpref=${xbase%.*}
path=${xpath}
pref=${xpref}
ext=${xfext}
echo "extions is : $ext" echo
if [[ "$ext" == 'mp3' ]] ; then
echo "$ext" echo
pref=$(tr -dc '[[:print:]]' <<< "$pref")
## holds on to normal chars rids the rest
# pref=${pref//[^A-Za-z&0-9 ]/ }
echo "new title is -> $pref"
sleep 2
#file=${FILENAME##*/}
# Newfile=${file%_*}
# echo " mv -v "$working_dir"/"$file" "$working_dir"/"$Newfile" "
(( count++ ))
fi
done
結果はこれです
[userx@voided temp]$ ./Justrenamefiles
max file is : 311
FILENAME IS: /home/userx/temp/Joy Division - Ceremony (Graveyard Studios, Prestwich - Previously
extions is : Joy Division - Ceremony (Graveyard Studios, Prestwich - Previously echo
FILENAME IS: unreleased).mp3
extions is : mp3
**new title is -> unreleased)**
ご覧のとおり、あまりにも多くのファイル名が削除されました。私はスクリプトで両方の方法を試しましたが、今1つはコメントアウトされていますが、それでも希望の結果は得られません。
私が望む結果を得るためにどのコードスニペットを使用できるかを知っている人はいますか?
ベストアンサー1
このグラフィックは、Unicode値が000A(16進数)の文字を表します。これは改行(LF)文字、改行文字。
Linuxでは、ファイル名に改行文字を使用できますが、これは非常にまれです。シェルスクリプトでは改行文字を使用してファイル名を処理できますが、特別な注意が必要です。スクリプトが解析する出力find
であり、この出力は改行を使用して項目を区切るため、この方法では本質的にファイル名の改行を処理できません。
スクリプトが必要以上に複雑です。仕事を単純に保つと効果があります。通常、すべてをテキストストリームに圧縮して再解析するのではなく、データがある場合はそのデータを処理します。
使用すると、find
出力は解析されません。ジョブを使用してください-exec
。
この名前を変更する最も簡単な方法は(改行を空白に変更します)次のとおりです。扱いにくい、そのおかげでzmv
機能。
autoload -U zmv # put this in your .zshrc
cd $working_dir
zmv '**/*' $'${f//\n/ }'
非組み込みLinuxに常にプリインストールされているプログラムを引き続き使用する必要がある場合は、bashを使用して名前を変更する簡単な(少し遅いですが)方法があります。
find "$working_dir" -type f -name '*
*' -exec bash -c 'mv "$0" "${0//
/ }"' {} \;
バッチファイルからbashを呼び出すと、作業を高速化できます。
find "$working_dir" -type f -name '
' -exec bash -c 'for x; do mv "$x" "${x//
/ }"' _ {} +
Linuxに改行文字が1つしかない場合は、次のものを使用できます。rename
コマンド(rename.ul
Debianおよびその派生製品から呼び出されます)。
find "$working_dir" -type f -name '
' -exec rename '
' ' ' {} +
お持ちの場合prename
:
find "$working_dir" -type f -name '
' -exec prename 'y/\n/ /' {} +