名前は同じですが、拡張子が異なるファイルのリストを並べ替える方法

名前は同じですが、拡張子が異なるファイルのリストを並べ替える方法

.docファイルとファイルを含む.pdfフォルダがあります。それらの中には、test.docと同じ名前がありますtest.pdf。バージョンが不要になったので、バージョンのみを維持するように.doc(実際に重複が存在する場合)フォルダを並べ替えたいと思います。.pdf

答え1

mkdir -p PDF
for f in *.pdf ; do
    bn=$(basename -- "$f" .pdf)
    [ -e "$bn.doc" ] && mv -- "$f" PDF/
done

私はあなたに任せますrm -rf PDF/。私は潜在的に危険な手順で元に戻せないステップをできるだけ遅くしたいと思います。

自分で削除するには:

for f in *.pdf ; do
    [ -e "$(basename -- "$f" .pdf).doc" ] && rm -f -- "$f"
done

このバージョンでは、中間変数 "$bn"を設定する必要はありません。どちらかがうまくいきます...私の考えでは、電子がより読みやすく、ファイルのデフォルト名を別の目的に使用する場合にも優れています。

答え2

努力する

for i in `ls | awk '{print $1}' | cut -d'.' -f1 | uniq -d`
do
   rm -r $PWD/$i".pdf"
done

警告:ファイル名にはドット(.)(Finename.extensionなど)のみを含める必要があり、同じコードスニペットを実行している場合は同じディレクトリで実行する必要があります。

答え3

フォルダを「ソート」してファイルを削除することは意味がありません。ファイル名で並べ替えるか、ls -bU | sortリストを処理して不要なファイルを削除できます。

  1. DOCを含むすべてのPDFファイルを削除する

    for d in *.doc; do p="${d/%.doc/.pdf}"; test -f "$p" && rm -f "$p"; done
    
  2. すべてのPDFファイルを削除

    rm -f *.pdf
    

両方の亜種は、スペースやその他の奇妙な文字を含むファイル名を処理します。を交換してrmソリューションをテストできますecho rm

答え4

そしてzsh

doc_base=(*.doc(:r)) && rm -f -- $^doc_base.pdf

または:

setopt histsubstpattern # could go in ~/.zshrc
rm -f -- *.doc(:s/%doc/pdf)

デフォルト名は同じですが、拡張子(docまたはその他)が異なるPDFファイルがある場合は、すべてのPDFファイルを削除するには:

setopt histsubstpattern extendedglob
rm -f -- *.*~*.pdf(:r:s/%/pdf)

関連情報