フォルダ名の末尾のスペースを削除するには?

フォルダ名の末尾のスペースを削除するには?

フォルダ名の末尾のスペースを削除したいです。

「Project1」というフォルダがあり、その中に「Exercise1」という別のフォルダがあります。

末尾のスペースを削除し、末尾のスペースのみを削除するスクリプトを使用したいと思います。
私の表現が正しいかどうかはわかりません。

よろしくお願いします、おやすみなさい。

コマンドを入力しました。/bin/ls -l | od -c

root@debian:~$ /bin/ls -l | od -c
0000000   t   o   t   a   l       3   2  \n   d   r   w   x   r   -   x
0000020   r   -   x       2       k   a   b   i   a       k   a   b   i
0000040   a       4   0   9   6       j   u   i   l   .       2   0    
0000060   1   0   :   2   6       B   u   r   e   a   u  \n   d   r   w
0000100   x   r   -   x   r   -   x       7       k   a   b   i   a    
0000120   k   a   b   i   a       4   0   9   6       j   u   i   l   .
0000140       2   2       1   7   :   4   6       D   o   c   u   m   e
0000160   n   t   s  \n   d   r   w   x   r   -   x   r   -   x       2
0000200       k   a   b   i   a       k   a   b   i   a       4   0   9
0000220   6       j   u   i   l   .       2   2       1   9   :   2   6
0000240       I   m   a   g   e   s  \n   d   r   w   x   r   -   x   r
0000260   -   x       2       k   a   b   i   a       k   a   b   i   a
0000300       4   0   9   6       j   u   i   l   .       2   0       1
0000320   0   :   2   6       M   o   d 303 250   l   e   s  \n   d   r
0000340   w   x   r   -   x   r   -   x       2       k   a   b   i   a
0000360       k   a   b   i   a       4   0   9   6       j   u   i   l
0000400   .       2   0       1   0   :   2   6       M   u   s   i   q
0000420   u   e  \n   d   r   w   x   r   -   x   r   -   x       2    
0000440   k   a   b   i   a       k   a   b   i   a       4   0   9   6
0000460       j   u   i   l   .       2   0       1   0   :   2   6    
0000500   P   u   b   l   i   c  \n   d   r   w   x   r   -   x   r   -
0000520   x       2       k   a   b   i   a       k   a   b   i   a    
0000540   4   0   9   6       j   u   i   l   .       2   0       1   0
0000560   :   2   6       T 303 251   l 303 251   c   h   a   r   g   e
0000600   m   e   n   t   s  \n   d   r   w   x   r   -   x   r   -   x
0000620       2       k   a   b   i   a       k   a   b   i   a       4
0000640   0   9   6       j   u   i   l   .       2   0       1   0   :
0000660   2   6       V   i   d 303 251   o   s  \n
0000673

答え1

そしてzsh

autoload zmv # best in ~/.zshrc
zmv -n '**/*[[:space:]]' '${f%%[[:space:]]#}'

(満足したら-nテスト実行のために削除)

隠されていないすべてのファイルまたはディレクトリの末尾から末尾の空白文字が削除されます。(#q/)ディレクトリのみに制限するには、パターンパラメータに追加します。または、(#qD)隠しファイルも処理できます。

POSIXly、近いことを行うことができます。

LC_ALL=C find . -depth -name '*[[:space:]]' -exec sh -x -c '
  for f do
    : mv -i "$f" "${f%"${f##*[![:space:]]}"}"
  done' sh {} +

-x(幸せなら削除:)。

この文字は ASCII 空白文字に制限されます。

答え2

Bashスクリプトを使用してこれを実行できます。

スクリプトを作成し、このコードをここにコピーし、「名前の間違ったディレクトリ」がある最上位ディレクトリに配置し、次のコマンドを実行します。

#!/bin/bash
    
# find all directory names that end with space:
while find "$(pwd)" -type d |grep  -q ' $'
do
    # select one and store its name in DIR variable
    DIR=$(find "$(pwd)" -type d | grep ' $'|head -1)
    
    # remove the last character (which is space) from that 
    # name and save it to NEW_DIR variable
    NEW_DIR=${DIR%?}
    
    # rename the directory
    mv "$DIR" "$NEW_DIR"
done

このスクリーンショットからわかるように、「」には同様の条件のディレクトリがあります。テスト2「ディレクトリに「space.sh」というスクリプトも」テスト2」。スクリプトを実行した後、必要に応じてディレクトリ名が変更されました。

ここに画像の説明を入力してください。

答え3

このpathlibモジュールはPython 3 階層をナビゲートし、そのファイルを検出して名前を変更するために必要なすべての手段があります。

python3 -c 'import pathlib
for p in iter(pathlib.Path(".").rglob("*[ \t]")):
  p.rename("/".join([str(p.parent),p.name.rstrip()]))'

次のPythonコードを使用して、ファイル階層に存在するファイル名の種類に基づいてツリーを再帰的に移動します。深さ優先は基本的な作業です。 ASCII以外の名前を見つけて、非ASCII文字を変更して名前を変更します。 「X」で。名前を変更する前に、新しい名前がすでに存在するかどうかは確認されません。

python3 - <<\eof
import pathlib, re
for p in iter(pathlib.Path('.').rglob('*[! -~]*')):
  foo = p.name
  for m in re.finditer(r"[^ -~]",p.name):
    foo = foo[:m.start()] + "X" + foo[m.end():]
  p.rename("/".join([str(p.parent),foo]))
eof

答え4

使用真珠rename

私が書いた記事ではありませんが、よく使用しています。 WindowsコンピュータからLinuxコンピュータにビデオファイルを転送すると、ディレクトリ名の末尾にスペースが追加されます。このコマンドを使用すると、フォルダーとファイル名の末尾に単一のスペースか複数のスペースであるかに関係なく、そのスペースは削除されます。

現在のディレクトリのディレクトリ/ファイル名の末尾にあるスペースを削除します。

試運転を行う

rename -n 's/ *$//' ./* 

実際の操作

rename 's/ *$//' ./*

関連情報