私は、Linuxバージョンの namemangler を見つけるのにあまり成功していません。Windowsで読めるように、1000個のファイルの名前を変更する必要があります。
これを実行できるLinuxプログラムを知っている人はいますか?
そうでない場合、フォルダ内のすべてのファイルの名前をたとえば最初の16文字に変更するだけでよいため、スクリプトが機能する可能性があります。スクリプトルートを下る価値はあるかもしれませんが、どこから始めればよいかわかりません。
Debian、Ubuntu、および派生物では、コマンドプロンプトでman rename
を入力すると、名前変更に任意のPerlのような正規表現コマンドを使用できる名前変更ユーティリティのマニュアルページが表示されます。
たとえば、これは現在のディレクトリ内のすべてのファイルを5つの長さに(切り捨てることにより)短くします。
rename 's/^(.{5}).*/$1/' *
最初の5文字をキャプチャし、それを置換で使用して残りを削除することで機能します。
もう1つの例は、ファイル名(sans拡張子)を5文字に短縮して拡張子を保持することです。
rename 's/^(.{5}).*(\..*)$/$1$2/' *
2つのグループをキャプチャします。最初のグループは最初の5文字、2番目のグループは拡張子です。これはmyCarefullyCraftedDocument.pdf
をmyCar.pdf
に変換します。
警告:これを使用慎重にできればcopyあなたのディレクトリの、または最初にバックアップを取ることによって。警告されました!!最低限、最初にrename -n
を使用します。これにより、実際に実行しなくても実行される処理が示されます。
競合するファイルを他のディレクトリに移動できます:
for i in *
do
j=${i:0:16}
if [ -e "$j" ]
then
mv "$i" /path/to/rename/later
else
mv "$i" "$j"
fi
done
この種類のシェル/ python/Perlスクリプトは問題ありませんが、GUIアプリがあなたに最適であると思われるので、 pyRenamer をお勧めします。他の多くのもの(プリセットを介した単純な一般的な操作[スペースを取り除く、ファイル名をあるポイントから別のポイントに切り捨てる]、単純な検索/置換、複雑な正規表現、プレビューアなど)。
ディストリビューションのソフトウェアリポジトリにある場合もあります(Fedoraの場合)。
スクリプトを記述してファイル名を短くし、Windowsがbashの数行で気に入らない文字を削除することができます。警告、テストされていないコードがブラウザに直接入力されました。
_shopt -s dotglob extglob
for x in *; do
y=${x//+([!-!#$%&'().0-9@A-Z^_`a-z{}~])/_} # change all problematic characters to _
if [[ $y = .* ]]; then y=_${y#.}; fi # change dot files to begin with _
y=${y:0:16} # truncate names
y=${y,,} # convert to lowercase
if [[ -e $y || $y =~ ^(aux|clock\$|com[0-9]|con|lpt[0-9]|nul|prn)(\.*)?$ ]]; then
# The file exists or is a DOS/Windows reserved name.
# Change foo.bar to foo~1.bar, foo~2.bar, ... (I ignore the length restriction here)
i=1
if [[ $y =~ \. ]]; then
prefix=${y%%.*}; suffix=.${y#*.}
else
prefix=$y; suffix=
fi
y=${prefix}~$i$suffix
while [[ -e $y ]]; do
((++i))
y=${prefix}~$i$suffix
done
fi
mv -- "$x" "$y"
done
_
サブディレクトリに再帰する必要がある場合は、_find -depth -exec …
_からシェルスクリプトを呼び出します。または、bashの代わりにzshを使用します。 zshでは、**/*(od)
は、現在のディレクトリの下にあるすべてのファイルに再帰的に展開されます。
一部のシステムにはrename
コマンドがないため、paxdiabloの答えの代わりに、mv
を使用して同じことを行う方法を次に示します。
for f in *.pdf; do
tmp=`echo $f | sed -r 's//^(.{5}).*(\..*)$/$1$2/'`
mv -b ./"$f" ./"$tmp"
done
移動時の-b
フラグは、削除または上書きされるファイルのバックアップを作成します。 forループのglobパターンを変更することにより、*
を単独で使用してすべてのファイルで実行することで、実行するファイルを調整できます。
ファイル名の変更を試す必要があり、システムにKDEライブラリがインストールされている(またはそれらを追加してもかまわない)場合は、krenameを確認してください。
それはあなたがそのツールで直接いくつかの単純な名前変更タスクを行うことを可能にし、さらにより複雑な状況のための正規表現を可能にします。
名前の変更条件を作成すると、名前が変更されたファイルのプレビューが表示されます。また、同じファイルの名前を再度変更することもできます。これは、段階的に行うと、各段階の複雑さがすぐにわかるような複雑なものになる場合に役立ちます。