GNU/Linux >> Linux の 問題 >  >> Ubuntu

ターミナルでファイルの名前を親ディレクトリの名前に変更しますか?

ディレクトリ内にネストされた多数のファイル(ディレクトリごとに1つのファイル)を処理する必要があります。これは次のようになります。

fred/result.txt
john/result.txt
mary/result.txt
...

現在、次のコマンドを使用して、これらの各ファイルを処理しています。

find . -maxdepth 1 -type d ( ! -name . ) -exec bash -c "cd '{}' && processResult result.txt" ;

このコマンドの最後に追加して、ファイル名をfred.txtに変更できるものを探しています。 などなど、後でファイルを親ディレクトリに移動して、ディレクトリの余分なレイヤーを削除します。

これを行うための最良の方法は何でしょうか?

承認された回答:

従来のアプローチを使用できます:find while read コンボ:

デモ:

$ ls *
fred:
results.txt

jane:
results.txt

john:
results.txt

$> find . -type f -name "results.txt" -printf "/%Pn" | while read FILE ; do DIR=$(dirname "$FILE" );                            
>  mv ."$FILE" ."$DIR""$DIR".txt;done                                                                                             
$> ls
fred/  jane/  john/
$> ls *
fred:
fred.txt

jane:
jane.txt

john:
john.txt

echoを使用する mvを使用する前に ファイルを使用して行をテストします。

マイナーな改善

bashへの呼び出しを埋め込むことができます execに、パラメータ拡張(具体的にはプレフィックスの削除)を使用します。基本的には、exec呼び出しにスクリプトを埋め込みます。

$> find "$PWD" -type f -name "results.txt" -exec bash -c ' DIR=$( dirname "{}"  ); echo "{}" "$DIR"/"${DIR##*/}".txt  ' ;                
/home/xieerqi/TESTDIR/fred/results.txt /home/xieerqi/TESTDIR/fred/fred.txt
/home/xieerqi/TESTDIR/jane/results.txt /home/xieerqi/TESTDIR/jane/jane.txt
/home/xieerqi/TESTDIR/john/results.txt /home/xieerqi/TESTDIR/john/john.txt

コマンドを一般的にするには(results.txtだけでなく、任意のファイルで機能します) )-name "results.txt"を削除するだけです 部。これに対する代替のPythonソリューションについては、この投稿も参照してください。


Ubuntu
  1. すべての端末出力をファイルに保存しますか?

  2. ターミナルでメディアファイル情報を表示するコマンド?

  3. Linuxでファイルの名前を変更するにはどうすればよいですか?

  1. ファイル名に先行ゼロを追加する Linux シェル スクリプト

  2. .txt ファイルに書き込みますか?

  3. ファイル名に次より大きい番号が含まれるファイルを検索

  1. Linuxターミナルでファイルの名前を変更します

  2. MvはFsでアトミックですか?

  3. 名前がハイフンで始まるファイルの名前を変更できません