私はまだシェル スクリプトの初心者なので、このコマンドは間違いなく間違っていると思います。ファイルのフォルダーの名前を txt ファイル内の名前に変更しようとしています。前提条件は、filenames.txt とフォルダー内のファイルが、システムの最初の行と最初のファイルが一致するように既に整理されていることです。私が得た結果は次のとおりです。
while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt
しかし、うまくいきませんでした。修正を手伝ってもらえますか?
ありがとう
答え1
ファイル名を変更するアルゴリズムルールがない場合(つまり、実際に入力としてファイルが必要な場合)、次のことをお勧めします。
名前を変更したいファイルのリストから txt ファイルを作成します。例:
. -name "*.mkv" > files.txt を検索します
このファイルを編集し、各行の古い名前の後に新しい名前を追加します。例:
./myfirst.mkv ./mynewfirst.mkv
このファイルを処理します:
行を読み取りながら、eval mv $line を実行します。done < files.txt
答え2
私はここからインスピレーションを得ています:https://unix.stackexchange.com/a/26604
ファイルとディレクトリ内のファイルの両方を同時にループする必要があるようです。
DIR=./thefiledir
while : ; do
read -r oldfile <&3
read -r newfile <&4
if [ -z "$oldfile" -o -z "$newfile" ]; then
break
fi
mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt
ファイルにディレクトリ名があるかどうかはわかりませんので、行の前にfilenames.txt
を入れて、これが目的の動作になるかどうかをテストすることをお勧めします。echo
mv
また、別の方法で試してみるかもしれません...新しい名前でファイルを生成する方法がわかりませんが、別の回答が示唆しているように、古い名前と新しい名前のファイルをループするか、名前を読み取ってロジックを適用して新しい名前を作成することができます。