0

すべての「?」を取り除こうとしています。より多くのサブディレクトリを取得した特定のディレクトリのファイル名で、その中にサブディレクトリがあります。システム コールで単純な perl 正規表現スクリプトを使用してみましたが、各サブディレクトリの再帰に失敗し、手動で行うと時間がかかりすぎます。どうすれば問題を解決できますか?

4

3 に答える 3

1

findコマンドを使用して、「?」でファイル名を検索できます。次に、そのexec引数を使用して、「?」を削除するスクリプトを実行します。ファイル名からの文字。/usr/local/bin/rename.shたとえば、保存できるこのスクリプトについて考えてみます(+ x権限を与えることを忘れないでください)。

#!/bin/sh
mv "$1" "$(echo $1| tr -d '?')"

次に、これは仕事をします:

find -name "*\?*" -exec rename.sh {} \;
于 2013-02-27T22:28:38.840 に答える
0

これを試して :

find -name '*\?*' -exec prename 's/\?//g' {} +

https://metacpan.org/module/RMBARKER/File-Rename-0.06/rename.PLを参照してください(これはrenameUbuntuディストリビューションのデフォルトコマンドです)

于 2013-02-27T22:29:32.843 に答える
0

「?」ですべての名前を検索します。それらをすべて削除します。おそらく -exec オプションも使用できますが、追加のスクリプトが必要になります

for f in $(find $dir -name "*?*" -a -type f) ; do
    mv $f ${f/?/}
done
于 2013-02-27T23:54:08.063 に答える